Есть у меня в классе метод, определенный с помощью variadic-шаблона. Можно считать, что вот так:
template<typename... Args>
void MyCoolClass::Printf(const std::string &fmt, Args... args)
{
printf(fmt.c_str(), args...);
}
При обращении к этому методу из других методов этого же класса (они все расположены в той же самой единице компиляции, в том же самом файле) все, конечно, хорошо.
Но при обращении из другого файла, грубо говоря main.cpp:
void main()
{
MyCoolClass mcc = new MyCoolClass();
mcc->Printf("Hello %d world!\n", 31337);
}
линкер ругается на то, что не может найти реализацию нужной функции. При этом я прекрасно понимаю компилятор.
Сборочку провожу по отдельным *.o файлам в мейкфайле, если запустить просто g++ *.cpp — все хорошо, как и должно быть.
Есть ли бескостыльный способ сказать компилятору, что нужно сгенерить, и не потерять при этом гибкость модульной сборки?