可以 C++策略类可用于指定构造函数是否存在?
假设我有:
struct Magic {
Magic(Foo* foo);
Magic(Bar* bar);
};
有没有办法让 Magic 成为模板,并定义模板类 st
typedef Magic<FooPolicy, ...> MagicFoo;
typedef Magic<BarPolicy, ...> MagicBar;
typedef Magic<..., ...> MagicNone;
typedef Magic<FooPolicy, BarPolicy> MagicAll;
st MagicFoo & MagicAll 有 Foo* 构造函数;魔法棒& MagicAll 有 Bar* 构造函数; MagicNone 既不是 Foo* 也不是 Bar* 构造函数?
基本上我希望构造函数根据策略类存在或不存在。
Suppose I have:
struct Magic {
Magic(Foo* foo);
Magic(Bar* bar);
};
Is there a way to make Magic a template, and define template classes s.t.
typedef Magic<FooPolicy, ...> MagicFoo;
typedef Magic<BarPolicy, ...> MagicBar;
typedef Magic<..., ...> MagicNone;
typedef Magic<FooPolicy, BarPolicy> MagicAll;
s.t. MagicFoo & MagicAll have the Foo* constructor; MagicBar & MagicAll has the Bar* constructor; and MagicNone nas neither the Foo* nor the Bar* constructor?
Basically I want constructors to exist or not exist based on policy classes.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以编写接受任何内容的构造函数,然后委托给策略提供的任何内容:
现在,一旦您转发参数,编译器将找出策略之间的最佳匹配:
You can write a constructor accepting anything, and then delegate to whatever the policies provide:
Now, once you forward the argument, the compiler will figure out the best match among the policies:
这看起来像是子类的应用程序,而不是策略类的应用程序。
MagicFoo
和MagicBar
似乎想成为Magic
的子类,它本身可能有一个protected
构造函数。That looks like an application for subclasses, not policy classes.
MagicFoo
andMagicBar
seem to want to be subclasses ofMagic
, which itself might have aprotected
constructor.您可以为所有策略提供模板定义,并为
MagicNone
提供专门化。一个例子是:You can have a template definition for all policies and a specialization for
MagicNone
. An example will be: