c++ - C++ 中优雅的函数定义

标签 c++ function macros

我有以下功能:

void func1(int8_t input);
void func1(int16_t input);
void func1(int32_t input);
void func1(float input);

这四个函数的实现是一样的,除了一些内部值是按照输入类型(int8_t, int16_t, int32_tfloat)。

目前我正在通过复制粘贴创建其他三个函数,但这非常乏味。

有什么方法可以让我只编写 1 个函数(例如,func1(int8_t input);),而在构建时自动创建其他三个函数?

或者这可以在不需要其他三个功能的情况下工作?非常感谢任何其他解决方案。

最佳答案

使用模板函数是解决这个问题的方法:

template <typename T>
void func1(const T value)
{
   //   Do some stuff
}

如果你需要使用依赖于输入类型的特殊内部值,你可以像这样使用辅助类型特征:

template <typename T>
struct SomeTrait
{
   static const int value = 10;
};

template <>
struct SomeTrait<float>
{
   static const int value = 20;
};

template <typename T>
void func1(const T value)
{
   std::cout << SomeTrait<T>::value << std::endl;
   //   Do some stuff
}

关于c++ - C++ 中优雅的函数定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37478509/

相关文章:

c++ - 从文本文件读取行到 std::vector<string> 的最有效方法

c++ - `decltype` 作为模板函数声明中模板类型规范的一部分

c++ - 抽象工厂改进

c++ - 使用函数输出结构值

macros - Factor Clojure 代码使用绑定(bind)到 var 或本地的参数映射在 Java 对象中设置许多不同的字段

C++文件输入问题

php - 使用来自 JavaScript 数据库的 php 变量?

c - 在函数中使用 printf 返回 void

macros - `:expr` 后跟 `:tt` ,`expr` 片段不允许

c++ - 将#include 指令包装到宏中