C++ 源代码中类的部分特化而不是头文件

标签 c++ partial-specialization template-classes

Foo.h

template<typename A, typename B>
class Foo{
public:
  Foo();
  /*..*/
};

Foo.cpp

template<typename A, typename B>
Foo<A, B>::Foo(){/*...*/}

template<typename A>
Foo<A, Beta>::Foo(){/* some specialized construction */} //<- this doesn't work.

template<>
Foo<Alpha, Beta>::Foo(){/*...*/} // <-will work, but I want partial specialization.

当我编译时,部分特化的构造函数抛出一个错误

nested name specifier 'Foo::' for declaration does not refer into a class, class template or class template partial specialization

我想我需要在某个地方声明这个部分特化的类,但我不想一直重新声明同一个类......即我不想在标题中放置以下内容文件:

template<typename A>
class Foo_Beta : public Foo<A, Beta>{
public:
  Foo_Beta();
}

//in cpp
template<typename A>
Foo_Beta<A>() : Foo<A, Beta>() {/**specialized constructor stuff**/}

因为那时我无法构造使用 Foo_Beta 构造函数的 Foo()

我试过了

template<typename A>
class Foo<A,Beta> : public Foo<A, Beta>{
public:
  Foo();
}

但这也不能编译。

本质上,声明一个类的偏特化而不重新声明该类的所有内部函数的语法是什么?

最佳答案

你说:

template<typename A> Foo<A, Beta>::Foo(){/* some specialized construction */} //<- this doesn't work.

只有当你专攻整个类(class)时,你才能使用它。您不能只特化类的一个成员函数。

以下应该有效:

template<typename A> class Foo<A, Beta>
{
   Foo();
};

template<typename A> 
Foo<A, Beta>::Foo()
{
}

关于C++ 源代码中类的部分特化而不是头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27823235/

相关文章:

c++ - 使用 Search 方法为普通类型 (int) 和指针的 const 创建数组类

c++ - 指定容器类型的迭代器类型的部分特化

c++ - 将字符串转换为 double ——失去精度

c++ - 素数600万以上

c++ - 带有模板化参数的偏特化函数模板

c++ - 方法作为方法的默认参数

C++ 在模板类中声明 std::pair 时出错

c++ - 编译器错误 `assigning incompatible type within if statement`

c++ - 为加载高度图的地形创建 UV 坐标?

C++输出找出问题