我有以下功能:
void func1(int8_t input);
void func1(int16_t input);
void func1(int32_t input);
void func1(float input);
这四个函数的实现是一样的,除了一些内部值是按照输入类型(int8_t
, int16_t
, int32_t
或 float
)。
目前我正在通过复制粘贴创建其他三个函数,但这非常乏味。
有什么方法可以让我只编写 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/