使用const char *进行编译时检查(nullptr)

时间:2013-10-15 06:46:34

标签: c++ compile-time nullptr

我有一个模板类,它以字符串文字作为参数。代码工作正常 - 但我有一个问题,是否有可能使用编译时检查来跳过生成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;
    }
};

2 个答案:

答案 0 :(得分:0)

在您的情况下,您不能将S的默认值设置为“nullptr”或任何其他常量字符串吗?当然,当你实际上不需要S为NULL时,它会起作用,但它会跳过if检查。

答案 1 :(得分:0)

添加一个功能,

constexpr const char* getStr(){
   return S? S : "null";
}

然后就变成了,

void print(){
   std::cout << getStr() << std::endl;
}