【发布时间】:2012-09-27 04:22:18
【问题描述】:
我在 C++ 中发现了一些烦人的东西,我不知道是否有一个技巧可以避免这种情况而不会产生任何开销。问题如下:
对于模板函数,我们可以有:
// Function declaration/definition
template<bool Option = false> void myFunction()
{
std::cout<<"Option = "<<Option<<std::endl;
}
// Then I can use :
myFunction<false>();
myFunction<true>();
myFunction(); // <- NO PROBLEM HERE
现在是模板类:
// Class definition/declaration
template<bool Option = false> class MyClass
{
};
// Then I can use :
myClass<false> x;
myClass<true> y;
myClass z; // <- PROBLEM HERE : only "MyClass<> z;" will compile !
为什么会出现这种行为? 有什么技巧可以避免这种情况吗? 对于具有作为模板传递的可选参数的类,我发现这对最终用户来说并不方便:他应该能够将默认实现用作无模板类...
【问题讨论】:
-
"有什么技巧可以避免这种情况吗?" 不,除非您考虑创建一个新类型(使用不同的名称),该类型从它公开继承并转发所有构造函数。
-
或者只使用 typedef 而不是继承:
typedef myClass<false> myClassDef; -
@Remy :哦,是的,或者那个。 :-P 我想我的大脑已经完成了这一天。
标签: c++ class templates c++11 default-value