Tag: 专业化

朋友声明声明一个非模板函数

我有一个基类类似于下面的代码。 我试图超载<<用于cout。 但是,g ++说: base.h:24: warning: friend declaration 'std::ostream& operator<<(std::ostream&, Base<T>*)' declares a non-template function base.h:24: warning: (if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning 我已经尝试在类声明/原型之后添加<>。 但是,然后我得到它does not match any template declaration 。 我一直在试图让运营商的定义完全模板化(我想),但我只能得到它与以下代码,手动实例化运营商。 base.h […]

来自模板类的单个方法的模板特化

始终考虑包含我的模板化类的以下标题包含在至less两个.CPP文件中,此代码编译正确: template <class T> class TClass { public: void doSomething(std::vector<T> * v); }; template <class T> void TClass<T>::doSomething(std::vector<T> * v) { // Do somtehing with a vector of a generic T } template <> inline void TClass<int>::doSomething(std::vector<int> * v) { // Do somtehing with a vector of int's } 但是注意专业化方法中的内联。 代码不要有链接器错误(在VS2008中是LNK2005),因为方法被定义了多次。 我明白这一点,因为AFAIK一个完整的模板专门化就像一个简单的方法定义一样。 那么,如何删除inline ? 代码不应该在每次使用时重复。 […]

显式的模板类成员函数的特化

我需要专门化一些types的模板成员函数(比方说double )。 它工作正常,而类X本身不是一个模板类,但是当我做模板GCC开始给编译时错误。 #include <iostream> #include <cmath> template <class C> class X { public: template <class T> void get_as(); }; template <class C> void X<C>::get_as<double>() { } int main() { X<int> x; x.get_as(); } 这里是错误信息 source.cpp:11:27: error: template-id 'get_as<double>' in declaration of primary template source.cpp:11:6: error: prototype for 'void X<C>::get_as()' does not match any in […]

c ++模板部分专业化的成员函数

我是新来的模板,所以也许这是一个微不足道的事情,但我不能得到它的工作。 我试图获得类成员函数的部分专业化。 最短的代码是: template <typename T, int nValue> class Object{ private: T m_t; Object(); public: Object(T t): m_t(t) {} T Get() { return m_t; } Object& Deform(){ m_t*=nValue; return *this; } }; template <typename T> Object<T,0>& Object<T,0>::Deform(){ this->m_t = -1; return *this; } int main(){ Object<int,7> nObj(1); nObj.Deform(); std::cout<<nObj.Get(); } 我尝试了非成员函数,这很好。 什么也行得通是一个成员函数的完全专业化。 但是,每当我尝试与部分规格。 一个成员函数的我得到的forms的错误: PartialSpecification_MemberFu.cpp(17): […]