我在test.h头文件中有一个这样的简单函数
template <class Dst = std::string, class T>
Dst format(const T&);
template <class Dst, Class T>
Dst format(const T&)
{
return Dst();
}
在test.cpp中
#include "stdafx.h"
#include "test.h"
#include <iostream>
int main(int argc , char** argv)
{
std::string f = format("");
std::cout << f;
return 0;
}
如果此标头添加到xcode
中的预编译头文件中代码不再编译。
我得到一个&#34;没有匹配的函数调用&#34;错误。
如果我手动将默认参数添加到函数调用
format<std::string>();
然后它有效。
如果不是声明和定义,我只留下定义......它会编译。
答案 0 :(得分:1)
据我了解,如果包含模板,则无法对头进行预编译,因为编译器仅在使用具有其他来源的具体类型的theese函数时才从模板中生成函数。没有具体的类型 - 没有功能。
答案 1 :(得分:0)
似乎如果我将默认参数放在DEFINITION而不是声明它似乎工作
template <class Dst , class T>
Dst format(const T&);
template <class Dst = std::string, Class T>
Dst format(const T&)
{
return Dst();
}