我有一个类模板,它接受可变数量的模板参数。类有一些函数接受与类的模板参数相对应的参数。我希望这些函数绑定到左值和右值。我如何才能做到这一点?
template<class ...C>
class Graph {
public:
Graph(C &...Context); // <- Only lvalues
Graph(C &&...Context); // <- Only rvalues
Graph(auto &&...Context); // <- Both lvalues and rvalues, but does not enforce that the types correspond to ...C
};
似乎不可能在类内部创建concept
。我可以在类之外创建一个概念,然后传递类模板包和函数模板包,并以某种方式验证它们吗?或者我可以在函数中添加一个requires
子句来解决这个问题吗?
我已经发现了一些类似的问题,但它们相当古老,所以没有使用concept
s的答案。
2条答案
按热度按时间hjzp0vay1#
std::constructible_from
概念可能会有所帮助:Demo
或更严格的
std::convertible_to
Demo
或
std::same_as
:Demo
gfttwv5a2#
听起来你想要的是
为了简洁,这利用了引用折叠规则。
如果你愿意,你可以为此写一个概念(在这里完整地写出来):