gpt4 book ai didi

c++ - 模板简化

转载 作者:行者123 更新时间:2023-11-30 02:08:17 25 4
gpt4 key购买 nike

在我的一个项目中,我有以下类模板层次结构:

template <typename FruitType, typename ParentFilterType = void>
class filter;

template <typename FruitType> // Specialization when no parent filter is needed
class filter<FruitType, void>;

在哪里FruitType可以是任何东西。假设它是 apple 之一, bananaorange .所以基本上,一个 filter可以有自己的父级 filter类型。

无法控制 filter代码:它必须保持原样

用户代码通常是这样的:

filter<apple, filter<banana, filter<orange> > > my_apple_filter;

显然,这有点冗长。我想知道是否有可能获得更具可读性的内容。像这样的东西:

complex_filter<apple, banana, orange>::type my_apple_filter;

在哪里complex_filter<apple, banana, orange>::type将解析为 filter<apple, filter<banana, filter<orange> > > .

我试过 complex_filter作为struct带有 typedef 的模板里面,但到目前为止没有成功。模板参数的数量应该是可变的(例如,从 1 到 5)。

您曾经需要过类似的东西吗?我该怎么做?

(不幸的是,我不能使用 C++0x,但如果有更好的解决方案,请随时发布,因为知道它总是很好)

谢谢。

最佳答案

在 C++0x 中,它将是可变参数模板。

如果没有 C++0x,您可以简单地使用大量参数,并提供默认值。

template <typename F0, typename F1 = void, typename F2 = void, typename F3 = void>
struct complex_filter
{
typedef filter<F0, typename complex_filter<F1, F2, F3>::type> type;
};

template <>
struct complex_filter<void,void,void,void>
{
typedef void type;
};

然后可以根据需要使用它,如果您需要更多参数,则必须手动扩展它。

关于c++ - 模板简化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7078576/

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