这是Mappings
类的前向声明:
template<typename Type, typename IDType=typename Type::IDType>
class Mappings;
template<typename Type, typename IDType>
class Mappings
{
public:
...
Type valueFor(const IDType& id);
...
};
如何转发声明valueFor
函数?
我需要类似的东西
template<typename Type, typename IDType>
Type Mappings::valueFor(const IDType& id)
{
// return value
}
答案 0 :(得分:3)
正如上面的注释中已经指出的那样,不可能只声明一个类的单个成员函数。如果您实际上正在寻找的是一种在类之外定义成员函数的方法:
template <typename Type, typename IDType = typename Type::IDType>
class Mappings;
template <typename Type, typename IDType>
class Mappings
{
public:
Type valueFor(const IDType& id);
};
template <typename Type, typename IDType>
Type Mappings<Type, IDType>::valueFor(const IDType& id)
{
return {};
}
请注意,::
之前的类名称需要包含模板参数。在类定义之外的成员函数的定义中,名称必须由类名称[class.mfct]/4限定,后跟::
。 Mappings
是类模板的名称,而不是类的名称。虽然在类模板的定义内,可以将模板的名称与类[temp.local]/1的名称同义使用,但在此成员函数的定义处,我们不在任何模板的定义内介绍。因此,您需要在此处使用该类的适当名称。