【发布时间】:2019-09-06 23:01:12
【问题描述】:
我有带有几个模板参数的模板结构
template<class Result, class T, class K>
struct MyClass
{
public:
Result foo()
{
return Result{};
}
};
此结构适用于所有模板,但 Result 为 void 的情况除外。
我知道,Result{} 不能实现为 void 类型,所以我目前的解决方案是使用这样的部分专业化:
template<class T, class K>
struct MyClass<void, T, K>
{
public:
void foo()
{
return;
}
};
这允许执行以下操作:
int main()
{
MyClass<void, double, char> mycl1;
MyClass<int, double, char> mycl2;
mycl1.foo();
mycl2.foo();
}
有没有办法让 mycl1.foo() 在 C++ 14 标准中没有部分类专业化的情况下进行编译?我可以使用 if constexr 和类型 trait is_void_v 组合,但我想知道是否有办法:
模板类方法部分显式的特化
模板类方法的实例化
【问题讨论】:
-
void main()无效,已为您修复 -
@user463035818 编译器不会抱怨你没有从 main 返回任何东西吗?
-
@Chipster
main是一个例外,其中return是可选的,如果您不编写它,编译器将为您提供return 0; -
对我来说,使用类模板的部分特化似乎是一个好策略。您在使用过程中是否遇到任何问题?