未知类型的 C++ 模板参数

标签 c++ templates

假设我们要编写一个函数,该函数应该获取一个值作为模板参数(例如,出于效率原因),但我们事先不知道我们期望的参数类型。可以将其实现为

template<typename T, T val>
func() { cout << val; }

然而,调用这样的函数并不好玩

func<int, 5>()

是否可以重写 func s.t.可以这样调用吗?

func<5>()

最佳答案

主要取决于您的实际功能的解决方案是按如下方式定义它:

template<typename T>
constexpr void func(T val) { }

然后调用它作为 f(5)并从函数本身的参数中推导出模板参数。

否则,在 C++14 中,您无法避免使用 template<typename T, T value> 模式.
它与标准模板库使用的模式相同,请参见 std::integral_constant 的定义示例.

减轻(也许)样板的可能解决方案是基于结构的使用,例如:

template<typename T>
struct S {
    template<T value>
    static void func() {}
};

你可以这样做:

using IntS = S<int>;
// ....
IntS::func<5>();

在即将发布的 C++17 修订版中,您将设法按如下方式进行:

template<auto value>
void func() {}

这可以调用为 f<5>() ,这就是您要找的..

关于未知类型的 C++ 模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39335519/

相关文章:

c++ - 使用 const 限定符将参数传递给模板函数时出错

c++ - 检查类是否派生自模板类

c++ - PX4/固件出现错误

c++ - 从 std::vector<int> 转换为 char[] C++

php - 使用 javascript/jquery 选择用户已检查的所有收件箱消息

c++ - 在定义可交换操作时减少代码重复

c++ - ld : duplicate symbol. g++

c++ - 如何通过 Qt 5.6 将 QML 应用程序窗口设置为透明?

c++ - 使用 GoogleTest 和 CMake 对 C 库进行单元测试

css - 将 bootstrap 主题导入 ruby​​ on rails 应用程序时出现问题