这看起来很简单,应该不是问题,但我没有看到它,所以任何帮助将不胜感激。
我有一个接受参数的函数,然后在模板中使用该参数。编译器(Visual C++ 2012)正在生成 C4100“未引用的形式参数”警告……这很烦人。我不明白为什么它认为该参数未被引用。
#define FactoryRegister(f, T) \
{ \
shared_ptr<FactoryCreator<T>> creator(new FactoryCreator<T>()); \
f.instance().Register(#T, creator); \
f.instance().Register(typeid(T).name(), creator); \
}
void FactoryRegister(hive::Factory& factory)
{
FactoryRegister(factory, MyClass);
}
编译此生成:“警告 C4100:'工厂':未引用的形式参数”
我会认为“工厂”很明显被引用,因为它的“instance()”函数在宏扩展后被调用了两次。我在这里假设代码扩展为:
void FactoryRegister(Factory& factory)
{
shared_ptr<FactoryCreator<MyClass>> creator(new FactoryCreator<MyClass>());
factory.instance().Register("MyClass", creator);
factory.instance().Register(typeid(MyClass).name(), creator);
}
代码运行良好,它只是抛出一个我不明白的警告。请注意,在我的实际代码中,宏和函数位于不同的项目和不同的文件中,但为了简单起见,它们一起包含在此处。