gpt4 book ai didi

c++ - 如何在子类(C++)中专门化模板方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:17:34 29 4
gpt4 key购买 nike

我正在尝试在其子类中专门化非模板类的模板方法:

//.h文件

class MyWriter {
public:
template<typename T>
void test(const T & val) {
std::cout << val << "\n";
}
};

//.cpp 文件

class MyType {
public:
MyType(int aa, double dd) : a(aa), d(dd) {}
int a;
double d;
};

class MyWriterExt : public MyWriter {
public:
template<> void test(const MyType &val) {
test(val.a);
test(val.d);
}
};

int main() {
MyWriterExt w;
w.test(10);
w.test(9.999);
w.test(MyType(15, 0.25));
return 0;
}

但是我收到一个错误:

Error 1 **error C2912**: explicit specialization; 
'void MyWriterExt::test(const MyType &)' is not a specialization of a function
template \testtemplate.cpp 30

如何扩展 MyWriter 类以支持用户定义的类?

最佳答案

特化应该针对同一个类而不是子类,也应该在类主体之外进行:

class MyWriter {
public:
template<typename T>
void test(const T & val) {
std::cout << val << "\n";
}
};

template<>
void MyWriter::test<MyType>(const MyType & val) {
test(val.a);
test(val.d);
}

您不需要子类来专门化原始成员函数模板。

同时考虑 overloading而不是特化。

关于c++ - 如何在子类(C++)中专门化模板方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4176951/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com