これは問題にならないほど単純に思えますが、私はそれを見ていないので、助けていただければ幸いです。
パラメータを受け取り、そのパラメータをテンプレートで使用する関数があります。コンパイラ (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: 'factory' : 参照されていない仮パラメーター」が生成されます。
「factory」は、その「instance()」関数がマクロ展開後に 2 回呼び出されるため、明らかに参照されていると思います。ここでは、コードが次のように展開されると仮定します。
void FactoryRegister(Factory& factory)
{
shared_ptr<FactoryCreator<MyClass>> creator(new FactoryCreator<MyClass>());
factory.instance().Register("MyClass", creator);
factory.instance().Register(typeid(MyClass).name(), creator);
}
コードは正常に機能しますが、理解できないという警告が表示されるだけです。私の実際のコードでは、マクロと関数は別のプロジェクトと別のファイルにありますが、簡単にするために一緒に含まれていることに注意してください。