【发布时间】:2016-10-26 10:48:48
【问题描述】:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4553.pdf
gcc6: -fconcepts
template<typename T>
concept bool String = requires(T s)
{
{ s.clear() } -> void;
// etc.
};
void print(const String& message);
//void print(Str message); // I want Str = const String&
void test()
{
std::string str;
print(str);
}
有没有办法将Str 声明为const String&?
【问题讨论】:
-
也许有可能,但我不建议隐藏这样的内容。如果我看到一个类型为
Str的参数,我会假设它创建了一个副本,而不是偷偷地获取一个引用。 -
这段代码只是一个例子。我想知道它是否可以完成,而不是这个特定的例子是否有意义。
-
你可以做类似
template <String T> using Str = const T&;的事情,但是你没有得到扣除。 -
这毫无意义。不允许声明缩写模板“void print(Str message);”根据要求。
-
这就是为什么我说你用这样的方法得不到扣除。
const T&上进行模式匹配需要模板推演。
标签: c++ typedef using c++-concepts c++20