具有复杂类型的C ++模板实例化

时间:2014-10-16 04:52:50

标签: c++ templates

我想实例化一个函数,其中模板参数类似于以下complexType

template <class U, class type> struct complexType;
template <class type> struct complexType<double, type>
{
  typedef type T;
};
template <class type> struct complexType<int, type>
{
  typedef type T;
};

我在头文件中得到以下内容

template <typename U>
void XYZ(
  typename complexType<U, double>::T abc);

和cpp文件中的实现

template <typename U>
void XYZ(
  typename complexType<U, double>::T abc)
{
  abc = 1.0;
}

template
void XYZ(
  complexType<double, double>::T abc);

不幸的是,GCC给了我以下编译器错误消息

void XYZ<>的模板ID XYZ(complexType<double, double>::T)与任何模板声明

都不匹配

有关如何解决此问题的任何建议吗?

1 个答案:

答案 0 :(得分:0)

U不是由其论点推断出来的。您需要一个明确的模板规范:

template
void XYZ<double>(
    complexType<double, double>::T abc);

您也可以这样做:

template void XYZ<double>(double);