我的代码中有这个模板专业化,当我用 gcc 编译它时工作得很好,但当我使用 Visual Studio 10 的编译器编译它时却没有:
字段.cpp
template<>
void Field<std::string>::setValueString(const std::string &val)
{
operator=(val);
}
template<>
void Field<bool>::setValueString(const std::string &val)
{
bool v = static_cast<bool>(atoi(val.c_str()));
operator=(v);
}
template<>
void Field<int32_t>::setValueString(const std::string &val)
{
int intv = atoi(val.c_str());
operator=(intv);
}
template<>
void Field<int16_t>::setValueString(const std::string &val)
{
int intv = atoi(val.c_str());
operator=(intv);
}
字段.hpp
template<typename FieldType>
class Field : public FieldBase
{
public:
Field(const std::string &fieldName)
: FieldBase(fieldName), _overriddenInsertValue(this) {}
~Field() {}
(...)
/**
* @brief Template specialized for every available field type in Model.cpp
*/
void setValueString(const std::string &)
{
ALT_ERROR("Field::setValueString called with wrong argument type.");
}
};
由于某种原因,在 Windows 上我总是会遇到错误,但我不明白为什么,因为当我使用 gcc 在 linux/mac os 上运行它时它工作正常。