Как я могу избавиться от предупреждения C4100 при использовании typeid в шаблонном методе? - PullRequest
1 голос
/ 16 сентября 2011

Следующий код C ++ использует typeid для вывода класса времени выполнения параметра:

#include <iostream>

class Foo
{
};

class Bar: public Foo
{
};

template <class O> void printTypeName(O& object)
{
    std::cout << typeid(object).name();
}

int main(void)
{
    Bar x;
    printTypeName(x);
}

Поскольку Foo не является полиморфным, VS C ++ не использует объект для определения информации о типеи выдает

C4100 предупреждение («формальный параметр без ссылки»).

Есть ли способ избавиться от предупреждения, сохраняя при этом возможность распечатать объекттипа с простым вызовом метода?Я бы предпочел не отключать предупреждение.

Ответы [ 3 ]

3 голосов
/ 16 сентября 2011

Вы можете использовать

#pragma warning(disable : 4100)
//.. stuff
#pragma warning(default : 4100)

, чтобы выключить и снова включить предупреждение, когда вы закончите.

1 голос
/ 16 сентября 2011

Для этого можно использовать макрос UNREFERENCED_PARAMETER.

==== Отредактировано OP: можно также использовать

(void) object;

и избегайте использования макроса (благодарность Дэвиду Родригесу за его комментарий об этом).

0 голосов
/ 16 сентября 2011

Это работает для меня без каких-либо ошибок:

template <typename T>
void prn(const T&){
    std::cout << typeid(T).name() << std::endl;
}
...