【发布时间】:2019-09-12 20:21:34
【问题描述】:
我有一个模板化结构,它有一个方法(连同其他参数)接受这些模板化参数。
template<class... Types>
struct Observer
{
void subscribe(const std::string& id, Types... args)
{
// store id somehow
data = std::make_tuple(args...);
}
std::tuple<Types...> data;
};
我想将所有模板化参数设为可选。所以它看起来像这样:
Observer<float, int> observer;
observer.subscribe("id1", 3.14, 4);
observer.subscribe("id2", 0.707); // this doesn't work!
observer.subscribe("id3"); // this doesn't work!
据我所知,没有直接的方法吗?但也许有人知道解决方法或技巧。
理想情况下,我想提供我自己的默认值。可能是这样的:
enum class SomeEnum { Val1, Val2 };
Observer<float, SomeEnum, 0.f, SomeEnum::Val1> observer;
observer.subscribe("id1", 3.14);
这里是LIVE EXAMPLE。
【问题讨论】:
-
如果没有提供参数,这些参数的值应该是多少?
-
如here 所述,这是明确不允许的。我不确定您想如何解决它,因为某些类型不是默认可构造的。
-
@Quentin 我想提供我自己的默认值。更新了描述
标签: c++ parameters c++14 variadic-templates