이렇게 간단하지 않아서 문제가되지는 않지만 보이지는 않습니다. 따라서 도움이 될 것입니다.C4100 템플릿에서 사용할 때 "참조되지 않은 형식 매개 변수"
매개 변수를 사용하는 함수가 있는데,이 매개 변수는 템플릿에 사용됩니다. 컴파일러 (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 : '공장': 참조되지 않은 형식 매개 변수를"
나는 "공장"매우 분명히 함수가 두 번 호출됩니다 "() 예"그것으로 참조하는 것을 생각했을 것이다매크로 확장 후. 코드가 다음과 같이 확장된다고 가정합니다.
void FactoryRegister(Factory& factory)
{
shared_ptr<FactoryCreator<MyClass>> creator(new FactoryCreator<MyClass>());
factory.instance().Register("MyClass", creator);
factory.instance().Register(typeid(MyClass).name(), creator);
}
코드가 제대로 작동하지 않아 그냥 이해할 수없는 경고가 표시됩니다. 실제 코드에서 매크로와 함수는 서로 다른 프로젝트와 다른 파일에 있지만, 단순함을 위해 여기에 함께 포함되었습니다.
인라인 함수 일 수 있습니다. 맞습니까? – Puppy
@DeadMG : 그는 형식 이름 ('# T')을 반복하지 않기를 원한다고 생각합니다. –
인라인은 내가 보여준 것으로부터 제안 될 수 있음을 알고 있지만 기능은 여기서는 예제로 단순화되었습니다. 실제 함수는 인라이닝을위한 후보가 아닙니다. – DigitalInBlue