gpt4 book ai didi

c++ - 专门针对模板类的 C++ 类成员函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:42:18 25 4
gpt4 key购买 nike

这是我的问题:

我有一个 cc 类,我想专门针对另一个模板类(带有模板参数)的类成员方法。一个例子:

#include <iostream>
#include <string>
#include <complex>

template<class T>
class cc {
public:

void foo() ;

T v ;
};

template<class T> // OK, generic definition of foo()
void cc<T>::foo() {
std::cout << v << std::endl ;
}

////////////////////////////////////////////////////////////////////
// ERROR! can not accept the the specialization respect to a
// complex<TT> with a template argument.
template<class TT>
void cc< std::complex<TT> >::foo() {
std::cout << "complex t " << v << std::endl ;
}
////////////////////////////////////////////////////////////////////


template<> // OK! specialization respect to a complex<double>
void cc< std::complex<double> >::foo() {
std::cout << "complex " << v << std::endl ;
}


template<> // OK!
void cc< double >::foo() {
std::cout << "double: " << v << std::endl ;
}

int main()
{
cc< std::complex<double> > r ;
cc<double> r2 ;

r.foo() ;
r2.foo() ;
}

在 C++ 中,complex 是一个模板类型,所以我想编写一个成员函数,它适用于每个 complex ,其中 type 是任何模板类型。有可能吗?

最佳答案

你可以部分特化整个类:

template<class T>
class cc {
public:

void foo() { std::cout << v << std::endl ; }

T v ;
};

template <class T>
class cc<std::complex<T>> {
public:

void foo() { std::cout << "complex " << v << std::endl ; }

std::complex<T> v ;
};

或将泛型方法委托(delegate)给“助手”(我展示了重载的使用):

template <typename T>
void print(const T&v) { std::cout << v << std::endl ;}

template <typename T>
void print(const std::complex<T>& c) { std::cout << "complex " << c << std::endl; }

template<class T>
class cc {
public:
void foo() { print(v); }

T v ;
};

关于c++ - 专门针对模板类的 C++ 类成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45881488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com