函数有没有办法自动检测其参数的数据类型?(请不要建议函数重载)
Is there a way a function automatically detects data type of its arguments? (Please don't suggest function overloading)
我要做的是:
(some data type say x) function_name((same data type x mentioned earlier) variable_name)
{
/* Function body */
}
int main()
{
(data type x mentioned above) var;
function_name(var);
.....
}
例如,我有
int function_name(int x)
int main()
{
int y;
function_name(y);
....}
在main()中,我通过上面的函数传递一个int变量 现在我想要另一个与上述函数完全相同的函数,但只是参数的数据类型和返回类型不同,比如
unsigned long long FUNCTION_NAME_SAME_DEFINITION_AS_function_name(unsigned long long x)
有没有办法在不使用函数重载的情况下合并上述两个函数?意味着函数检测通过它传递的变量的数据类型?如果我传递类型 1 的参数,它返回数据类型 1 的值,如果我传递类型 2 的参数,它返回数据类型 2 的值。
你的意思是像模板?
template <typename T>
T function_name(T variable_name)
{
/* Function body */
}
读一本书什么的。
您可以使用模板执行此操作。
template <typename T>
T function_name(T var) {
// code
}
int main() {
int foo;
char bar;
function_name(foo); // returns int
function_name(bar); // returns char
}
编译器将尝试使用可用模板定义进行各种类型组合,以输出有效函数。 如果成功,它将生成具有该类型的完整函数定义。
回复: 用户CPP: 可能吗? 模板 T function_name{....}, 平均函数不接受数据类型,在主函数中我写"变量 = function_name()"
这直接是不可能的。 函数模板只能从参数推断类型,而不能从返回值推断类型。 你有一些选择。 您可以通过引用进行修改,而不是返回值:
template <typename T>
void function_name(T& var) {
// code
}
int main() {
int foo;
char bar;
function_name(foo); // modifies foo as an int
function_name(bar); // modifies bar as a char
}
您还可以显式声明类型:
template <typename T>
T function_name() {
// code
}
int main() {
int foo;
char bar;
foo = function_name<int>(); // returns int
bar = function_name<char>(); // returns char
}
推荐阅读:
函数模板(特别是函数模板中的参数推导)
相关文章:
- 为什么使用SFINAE而不是函数重载
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- c++:可变模板和函数重载
- 在缺少函数重载时抛出异常,并带有 std::variant 而不是编译时错误
- 解决模板成员函数重载
- 为什么不允许成员函数和非成员函数之间的函数重载?
- 推断模板化函数中的函数重载
- C++复制函数重载导致"must be a nonstatic member function"错误
- 为什么 std::sort 找不到合适的(静态成员)函数重载?
- 可变参数泛型 lambda 和函数重载
- C++中的函数重载和继承
- 当有右值构造函数可用时,为什么从右值调用类引用构造函数重载?
- C/C++ 可变参数宏函数重载
- 将基类的成员函数重载到其他派生类C++
- C++ 函数重载匹配
- C++函数重载,具体步骤是什么
- C++:使用 param pack 显式调用函数重载
- 隐式生成的函数重载用于右值参数?
- 使用函数重载输入运算符
- 运算符重载函数上的函数重载