c++ - 类成员模板函数的名称实例

标签 c++ templates c++17

考虑一下这段代码,它显然不起作用,但说明了我想要做的事情。

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 个值(而不是类型)模板参数,我想为它们提供不同的名称,以便用户不必输入模板参数。上面的 onetwo 对此进行了说明。

有什么想法如何使用 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...); }

Here it is live

写起来有点冗长,但确实为客户端程序员提供了您想要的简单性。

关于c++ - 类成员模板函数的名称实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59280066/

相关文章:

c++ - 如何在我的 Qt 应用程序中同时隐藏/显示 QLabel 和 QTextEdit?

C++继承函数覆盖

html - CSS换行问题

c++ - #pragma pack、模板类型定义和结构对齐

c++ - 在成员函数返回类型上参数化的类模板部分特化

c++ - 为什么使用 std::forward<T> 而不是 static_cast<T&&>

c++ - 使用 Boost::Spirit 解析时出现段错误

c++ - 如何在我的代码中包含负值?数制转换

c++ - 为什么 std::atomic 构造函数在 C++14 和 C++17 中的行为不同

C++ 在键为自定义类的映射中使用 std::find