我有一个模板类,它以字符串文字作为参数。代码工作正常 - 但我有一个问题,是否有可能使用编译时检查来跳过生成if (S)
或else
块体? (像__if_exists或#if,traits等)。我知道我可以有一个专门的A<nullptr>
定义一个不同的print()
函数,但也想知道是否还有其他(更简单)的方法。谢谢!
template<char const* S = nullptr>
class A
{
public:
void print()
{
if (S)
cout << S << endl;
else
cout << "nullptr" << endl;
}
};
答案 0 :(得分:0)
在您的情况下,您不能将S的默认值设置为“nullptr”或任何其他常量字符串吗?当然,当你实际上不需要S为NULL时,它会起作用,但它会跳过if检查。
答案 1 :(得分:0)
添加一个功能,
constexpr const char* getStr(){
return S? S : "null";
}
然后就变成了,
void print(){
std::cout << getStr() << std::endl;
}