Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模板函数映射特定类型并保持所有其他类型不变_C++_Templates_Variadic Templates_C++17_Template Specialization - Fatal编程技术网

C++ 模板函数映射特定类型并保持所有其他类型不变

C++ 模板函数映射特定类型并保持所有其他类型不变,c++,templates,variadic-templates,c++17,template-specialization,C++,Templates,Variadic Templates,C++17,Template Specialization,我正在使用Boost序列化带有折叠表达式的模板包。序列化: template <typename ... Args> std::string toBytes(Args... args) { std::ostringstream buf; boost::archive::binary_oarchive arch(buf); (arch << ... << args); return buf.str(); } 但是这个代码给出了

我正在使用Boost序列化带有折叠表达式的模板包。序列化:

template <typename ... Args>
std::string toBytes(Args... args)
{
    std::ostringstream buf;
    boost::archive::binary_oarchive arch(buf);
    (arch << ... << args);
    return buf.str();
}
但是这个代码给出了

错误C2912:显式专门化“charptrwraper f(char*)”不是函数模板的专门化

这有什么问题?我该如何解决这个问题

这有什么问题?我该如何解决这个问题

问题是你的专业化不是专业化

通用的
f()
定义为:

template<typename T> 
T f(T x) { return x; }
不是
f()
的有效专门化,因为它接收
char*
并返回
charptrrapper

f()
的几个有效专门化是:

template <>
char const * f<char const *>(char const * x) { return x; }

// or

template <>
char const * f(char const * x) { return x; }

或者更好的是,接收一个
char const*
而不是
char*

一个专业化必须在主模板之后。无论如何,请考虑使用重载代替。<代码> CARPrTrRAPPER F(CHAR*X)< /C> >不匹配<代码> T f(tx)< /> >它吗?
template<>
CharPtrWrapper f(char * x);
template <>
char const * f<char const *>(char const * x) { return x; }

// or

template <>
char const * f(char const * x) { return x; }
CharPtrWrapper f(char * x) { return CharPtrWrapper(x); }