考虑一下这段代码,它显然不起作用,但说明了我想要做的事情。
struct C {
template <int I>
void f(float x) {...}
...
using one = f<1>;
using two = f<2>;
};
C c;
c.one(4.0f);
c.two(77.0f);
我的类有 10 个成员函数,可以采用 2 个值(而不是类型)模板参数,我想为它们提供不同的名称,以便用户不必输入模板参数。上面的 one
和 two
对此进行了说明。
有什么想法如何使用 C++17 甚至 C++20 来做到这一点吗?
更新:
下面的答案很好,但如上所述有点冗长。我试图避免:
void one(float v) {
f<1>(v);
}
尽管我的实际陈述会稍长一些。
希望有一些简洁的内容。
最佳答案
您不能直接为成员函数添加别名。但您可以编写转发给它们的包装器:
template<typename... Args>
decltype(auto) one(Args&& ...args) { return f<1>((Args&&)args...); }
template<typename... Args>
decltype(auto) two(Args&& ...args) { return f<2>((Args&&)args...); }
写起来有点冗长,但确实为客户端程序员提供了您想要的简单性。
关于c++ - 类成员模板函数的名称实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59280066/