我在 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 !
为什么是这种行为的原因?有什么技巧可以避免这种情况吗?对于具有作为模板传递的可选参数的类,我发现这对最终用户来说并不方便:他应该能够将默认实现用作无模板类...