2017-01-30 9 views
0

Я пытаюсь преобразовать рабочий метод, который печатает аргумент в правильную функцию, но я не уверен в типе переменной.Определить тип переменной

Метод работы у меня есть:

#define WARN(x)  std::cout << "WARNING! " << x << "!" << std::endl; 

Что я могу затем передать предложение аналогично использования зОго :: COUT

WARN("This is a test warning." << " And this is some more stuff..."); 

Однако, я считаю, что это должно быть более аккуратно завернутым в вместо функции define.

Пожалуйста, помогите мне понять, как препроцессор интерпретирует переменную x и как я могу преобразовать определение в функцию.

P.S. Я знаю, что я мог бы использовать вариационную функцию, но я бы предпочел не передавать количество аргументов и, скорее всего, избегать вариации.

+0

Не ошибитесь в VARIADIC функции для VARIADIC шаблона, который знает, как передаются много аргументов и их типов. – chris

+0

Я не понимал, что это две разные вещи. Я загляну в шаблон, спасибо! – user7119460

+0

Если это только один аргумент, эта вариационная часть тоже становится излишней. Достаточно обычного шаблона. – chris

ответ

0

но я не уверен в типе переменной.

Здесь использование шаблонов функций может обеспечить чистое решение.

template <typename T> 
void WARN(T const& x) 
{ 
    std::cout << "WARNING! " << x << "!" << std::endl; 
} 

является хорошей заменой для

#define WARN(x)  std::cout << "WARNING! " << x << "!" << std::endl; 
+0

Спасибо за предложение, но будет ли это работать для нескольких переменных? Например, могу ли я пройти: «Это одна строка« << », а это еще одна». Как аргументы, которые я мог использовать для определения версии? Поскольку функция, похоже, принимает только один аргумент. – user7119460

+0

@ user7119460, да, вы можете иметь функциональные шаблоны с несколькими аргументами. –

 Смежные вопросы

  • Нет связанных вопросов^_^