C ++专用方法模板会产生多个定义错误

问题描述

我正在使用C ++98。我正在编写JSON对象包装器。对于所有普通数字,它们可以使用相同的函数,但是对于浮点数和双精度数,我需要一个单独的函数。字符串也一样。我使用模板和专门化功能编写了此代码,并且可以很好地编译,但是在构建整个项目时,我遇到了大约10亿个有关多个定义的错误。我认为我的专业不适当。我能够在类对象本身中包含和不包含这些定义的情况下编译该文件,因此我什至不知道这些定义是否必需。

class Object {
    public:
        template <class T>
        bool Set(std::string key,T value);
        // having these defined or not doesn't seem to matter
        bool Set(std::string key,double value);
        bool Set(std::string key,float value);
        bool Set(std::string key,std::string value);
};


template <class T>
bool Object::Set(std::string key,T value){
}

template <>
bool Object::Set<double>(std::string key,double value){
}


template <>
bool Object::Set<float>(std::string key,float value){
}

template <>
bool Object::Set<std::string>(std::string key,std::string value){
}

如何适当地专门化这些模板,以使编译器/链接器不适合?

解决方法

如果您在头文件的类之外定义模板的成员函数的专业化,则需要像这样进行专业化inline

template <> 
inline bool Object::Set<double>(std::string key,double value){
}

template <>
inline bool Object::Set<float>(std::string key,float value){
}

template <>
inline bool Object::Set<std::string>(std::string key,std::string value){
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...