我最近遇到了问题,我需要一些帮助函数来返回不同类型的实例,类似于std::make_pair
。我的这种选择的语法是:相同的类和实例名称
Event event(Trigger(...), []() { });
其中...
是创建基于...
的类型(例如,Time
,UserInput
等)不同的触发类型一些简单的参数。
另外我想是可以直接使用一些预定义的触发器,如:
Event event(Trigger::OnInit, []() { });
我发现,定义一个类和实例名为Trigger
让我支持语法:
static const struct Trigger {
static const OnceTrigger OnInit;
TimeTrigger operator()(Time const &) const;
UserTrigger operator()(UserInput const &) const;
} Trigger;
注意名称相同的类型和实例名称。
这适用于GCC和MSVC,但我想知道是否和如何有效这是根据标准。两个编译器都支持这个“运气”吗?还是定义名称查找,以确保可以在所有编译器上工作?
您可以使用'Trigger'的构造函数来代替'operator()'超载的'Trigger'对象。 –
@JosephMansfield不幸的是我需要根据参数返回不同的类型,类似于std :: make_pair。 – zennehoy
哦,没有注意到。 –