У меня есть класс шаблона, который принимает строковый литерал как параметр. Код работает отлично - но у меня есть один вопрос, можно ли использовать проверку во время компиляции, чтобы пропустить генерирование 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;
}
};
В вашем случае вы не можете установить значение по умолчанию S как "nullptr" или любую другую константную строку? Конечно, это работает, когда вам не нужно, чтобы S было NULL, но оно пропустит проверку if.
добавьте функцию,
constexpr const char* getStr(){
return S? S : "null";
}
то это становится,
void print(){
std::cout << getStr() << std::endl;
}
if .. else ..
блок кода.