gpt4 book ai didi

c++ - 使用可变数量的模板化参数访问模板化类的成员

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:53:21 26 4
gpt4 key购买 nike

我有一个带有可变数量模板参数的模板类。在这些情况下(我负担不起 C++11),一个好的做法是创建一个我们称之为 none 的默认类,并将其作为默认值,如下所示。

struct none {};

template<class T1=none, T2=none, T3=none>
class A{

template<class T>
double extract() { return none();}

template<>
double extract<T1>() { return m1_();}

template<>
double extract<T2>() { return m2_();}

template<>
double extract<T3> () { return m3_();}

T1 m1_;
T2 m2_;
T3 m3_;
};

在这个阶段,我不知道如何实现可以访问每个模板化参数的通用/模板化访问器函数。

所有的模板化参数都是不同的,所以我为每个模板化参数特化了 A::extract()。

有没有更好的方法来做到这一点?我可以查看任何类型的标记吗?

最佳答案

struct none {};

template <class T, class N>
class Holder : public N
{
protected:
T m;
typedef Holder<T, N> First;
double extractP(T*) { return m(); }
template <class X> double extractP(X*) {
return this->N::extractP(static_cast<X*>(0));
}
};

template <class T>
class Holder<T, none>
{
protected:
T m;
typedef Holder<T, none> First;
double extractP(T*) { return m(); }
template <class X> none extractP(X*) {
return none();
}
};



template <class T1 = none, class T2 = none, class T3 = none>
class A : Holder<T1, Holder<T2, Holder<T3, none> > >
{
public:
template <class T> double extract() {
return this->extractP(static_cast<T*>(0));
}
};

关于c++ - 使用可变数量的模板化参数访问模板化类的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24350228/

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