gpt4 book ai didi

c++ - 如何在类外声明特化模板方法?

转载 作者:行者123 更新时间:2023-12-03 06:56:47 25 4
gpt4 key购买 nike

Converter类旨在将字符串转换为另一种类型。因此,如果目标也是字符串,那么它应该只返回原始值的副本。

工作代码如下:

template<typename C>
class Converter {
public:
template<typename T>
static T To(const std::wstring& obj);

template<>
static std::wstring To(const std::wstring& obj) {
return obj;
}
};

template<typename C>
template<typename T>
T Converter<C>::To(const std::wstring& obj) {
// Conversion
return T();
}

(适用于VC++ 2015 Update 3)

我试图将特殊化方法移到类声明之外,如下所示:
template<typename C>
template<>
std::wstring Converter<C>::To<std::wstring>(const std::wstring& obj) {
return obj;
}

并且有几个编译错误:

Error C3212 'Converter::To': an explicit specialization of a template member must be a member of an explicit specialization

Error C2768 'Converter::To': illegal use of explicit template arguments

最佳答案

经验法则:

prefer function overload over specialization!



在您的情况下,请使用重载和自定义:
#include <type_traits>
#include <string>

template<typename C>
class Converter {
public:
template<typename T, typename std::enable_if<!std::is_same<T, std::wstring>::value>::type* = nullptr >
static T To(const std::wstring& obj) {

}

template<typename T, typename std::enable_if<std::is_same<T, std::wstring>::value>::type* = nullptr >
static std::wstring To(const std::wstring& obj) {

}
};

[live demo]

关于c++ - 如何在类外声明特化模板方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46526988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com