Я написал шаблон для очень простой функции печати, и я поместил его в библиотеку пользовательских функций, которые имеют дело с консольным IO.Специализированный шаблон функции в отдельном файле .cpp
Я написал вторую библиотеку для конкретного проекта, то есть ребенка оригинала. Он специализируется на одном из шаблонов.
Я столкнулся с ошибкой, которая (я подозреваю) вызвана вызовом main.cpp, произошедшим перед объявлением специализированного шаблона. Ошибка содержит следующую строку:
In instantiation of 'static void baseIO::print(S) [with s = std::vector<int>]'
что означает его вызов baseIO::print()
вместо specialIO::print()
Я попытался сделать specialIO::print()
регулярная функцию вместо шаблона, и объявить его как обычно в заголовке, но отрицала основными .cpp доступ к базовому шаблону.
Есть ли способ сделать мою специализацию пригодной для использования в main.cpp БЕЗ, если
объявить
реализовать ее там?
//in main.cpp
#include <vector>
#include "specialIO.h"
main(){
std::vector<int> myVector;
specialIO::print(myVector);
specialIO::print("hello world");
return 1;
}
.
//in baseIO_templates.cpp - templates are outside of the baseIO.cpp file because of linker errors
template<typename S> //primary template
void baseIO::print(S str){
std::cout << str;
}
//baseIO.h
class baseIO{
public:
template<typename S> //primary template
static void print(S str);
}
#include "baseIO_templates.cpp"
.
//specialIO.cpp
template<> //specialized template
void static specialIO::print(vector<int> myVector){
for(int i : myVector){
baseIO::print(i)
}
}
//specialIO.h
class uberIO : public baseIO {
//empty
}
Любая конкретная причина, почему вы всегда копируете вектор и не передаете его const ref? – axalis