gpt4 book ai didi

c++ - 可以使用 C++ 策略类来指定构造函数的存在/不存在吗?

转载 作者:太空狗 更新时间:2023-10-29 21:30:38 26 4
gpt4 key购买 nike

假设我有:

struct Magic {
Magic(Foo* foo);
Magic(Bar* bar);
};

有没有办法让Magic成为一个模板,并定义模板类s.t.

typedef Magic<FooPolicy, ...> MagicFoo;
typedef Magic<BarPolicy, ...> MagicBar;
typedef Magic<..., ...> MagicNone;
typedef Magic<FooPolicy, BarPolicy> MagicAll;

s.t. MagicFoo 和 MagicAll 有 Foo* 构造器; MagicBar & MagicAll 有 Bar* 构造函数; MagicNone 既不是 Foo* 也不是 Bar* 构造函数?

基本上我希望构造函数存在或不存在基于策略类。

最佳答案

您可以编写一个接受任何内容的构造函数,然后委托(delegate)给策略提供的任何内容:

// "Tag" and "No" are used to make the class/function unique 
// (makes the using declarations work with GCC).
template<int Tag>
struct No { void init(No); };

template<typename P1 = No<0>, typename P2 = No<1>, typename P3 = No<2> >
struct Magic : P1, P2, P3 {
template<typename T>
Magic(T t) {
init(t);
}

private:
using P1::init;
using P2::init;
using P3::init;
};

现在,一旦您转发参数,编译器就会找出策略之间的最佳匹配:

struct IntPolicy { void init(int) { std::cout << "called int!"; } };
struct FloatPolicy { void init(float) { std::cout << "called float!"; } };
Magic<IntPolicy, FloatPolicy> m(0), n(0.0f);

关于c++ - 可以使用 C++ 策略类来指定构造函数的存在/不存在吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2345284/

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