在下面的代码中,我继续使用模板化的get-function创建一个结构,然后创建一个模板化的结构。
#include <iostream>
struct MyStruct
{
int a;
template<typename T> T getA();
};
template<typename T>
T MyStruct::getA<T>()
{
return static_cast<T>(a);
}
template<typename T>
struct MyStructT
{
int a;
T getA();
};
template<typename T>
T MyStructT<T>::getA()
{
return static_cast<T>(a);
}
int main(int argc, char* argv[])
{
MyStruct s;
s.a = 5;
std::cout << s.getA<double>() << ' ' << s.getA<bool>() << std::endl;
MyStructT<double> st;
st.a = 5;
std::cout << st.getA() << std::endl;
return 0;
}MyStructT可以很好地编译和工作,但MyStruct::getA<T>会生成一个错误:
$ g++ --std=c++11 -o run *.cpp
test.cpp:10:21: error: non-type partial specialization ‘getA<T>’ is not allowed
10 | T MyStruct::getA<T>()定义如下
发布于 2021-01-26 15:19:38
无论出于什么原因,模板类型在实现期间不会在成员函数的名称中重复,这与处理类/结构的名称的方式不同。实现它的正确方法是:
template<typename T>
T MyStruct::getA()
{
return static_cast<T>(a);
}在这里,getA<T>被简单地转换为getA。
https://stackoverflow.com/questions/65897241
复制相似问题