【发布时间】:2017-02-28 04:58:56
【问题描述】:
除了函数名本身之外,模板使函数签名的大部分内容都可参数化。但是是否也可以参数化成员函数的常量?
琐碎、简约、非模板示例:
struct Foo {
Foo * self() { return this; }
Foo const * self() const { return this; }
};
vs 稻草人模板化假设:
struct Foo {
template<typename T> T self() std::constness_of(T) { return this; }
};
【问题讨论】:
-
您的第二个问题应该被删除。可能有,但我怀疑有人能证明这一点。
-
const(expr)会很好。连同noexcept(auto) -
std-proposals 有一些关于此的主题(拼写为
auto_const或类似名称)。不过没有最近的实际论文。 -
@T.c.我认为
const(expr)是一个更好的系统,const(auto)做了一些黑魔法(它成为这种类型的模板函数?或者它自动编写两个重载?) -
当第一个参数的名称是
this时,我想要这种特殊行为。在这种情况下,this可以实现为转发引用。template<typename T> method(T&& this, .. other args ..)。T会告诉你 cv 限定符,以及它是左值还是右值
标签: c++ c++11 templates constants c++14