0

我有一个模板类,它以字符串文字作为参数。代码工作正常 - 但我有一个问题,是否可以使用编译时检查来跳过生成if (S)else块体?(类似于 __if_exists 或 #if、特征等)。我知道我可以有一个A<nullptr>定义不同print()功能的专业,但也想知道是否有其他(更简单的)方法可以做到这一点。谢谢!

template<char const* S = nullptr>
class A
{
public:
    void print()
    {
        if (S)
            cout << S << endl;
        else
            cout << "nullptr" << endl;
    }
};
4

2 回答 2

0

添加一个功能,

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

然后它变成,

void print(){
   std::cout << getStr() << std::endl;
}
于 2013-10-15T07:08:10.040 回答
0

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

于 2013-10-15T07:02:58.550 回答