让我们假设我们有一个函数模板,它在 cpp 文件中借助显式实例化实现,如下所示:
函数.h
template<typename T> void function(T val);
函数.cpp
#include "function.h"
template<typename T> void function(T val) { /* do something */ }
template void function<double>(double val);
我们现在可以在包含function.h的主文件中调用该函数,如下所示:
double val = 1.0;
function(val);
让我们进一步假设我们有一个这样实现的类:
数据.h
class Data
{
private:
double mVal;
public:
Data(double val) { mVal = val; }
operator double () { return mVal; }
};
以下代码导致链接器错误 LNK2019: unresolved external (Visual Studio 2010):
Data a(1.0);
function(a);
我们可以使用以下表达式之一来为function ()
function<double>(a);
function(double(a));
...
但是为什么不能只调用function(a)?是否存在任何其他解决方案来实现这一点,而无需显式实例化具有数据类型的function()?