проверка во время компиляции с помощью const char * (nullptr)

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;
    }
};
Теги:
compile-time
nullptr

2 ответа

0

В вашем случае вы не можете установить значение по умолчанию S как "nullptr" или любую другую константную строку? Конечно, это работает, когда вам не нужно, чтобы S было NULL, но оно пропустит проверку if.

  • 0
    Да, значением по умолчанию S является nullptr. Я не уверен, что слежу за тобой, можешь рассказать подробнее?
0

добавьте функцию,

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

то это становится,

void print(){
   std::cout << getStr() << std::endl;
}
  • 0
    Спасибо - print / cout только для демонстрации, фактический код более сложен, чем этот, добавление новой функции все равно приведет к тому же самому, if .. else .. блок кода.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню