有什么方法可以声明Str
为const String&
?
不,而且,无论如何你都不想要那样。概念是关于向类型添加约束。因此,如果您想限制print
采用某些模型String
,您可以这样做:
template <typename T> requires String<T> void print(T const&); // requires-clause
template <String T> void print(T const&); // partial-concept-id
void print(String auto const&); // probably what C++20 will allow
但是约束和价值类别是正交的。您可以String
按价值计算:
void print(String auto);
您可以String
通过转发参考来获取:
void print(String auto&&);
这些都是与“我想要一个String
”方面不同的选项。你不能真正将它们组合在一起。
你能做的最好的事情是:
template <String T> using Str = T const&;
template <typename T> void print(Str<T>); // silently a const&
或者
template <typename T> using CR = T const&;
template <String T> void print(CR<T>); // silently a const&
这样可行。对于作品的一些定义。但就像......不要那样做。一个函数接受一个而不是一个值这一事实const&
是非常重要的视觉信息,不要只是隐藏它。