Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 函数是否有自动检测其参数数据类型的方法?(请不要建议函数重载)_C++_Function_Type Conversion_Overloading - Fatal编程技术网

C++ 函数是否有自动检测其参数数据类型的方法?(请不要建议函数重载)

C++ 函数是否有自动检测其参数数据类型的方法?(请不要建议函数重载),c++,function,type-conversion,overloading,C++,Function,Type Conversion,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(

我想做的是:

 (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 */
}
模板
T函数名称(T变量名称)
{
/*功能体*/
}

读一本书或什么的。

你可以用模板来完成

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
}
模板
T函数名称(T变量){
//代码
}
int main(){
int foo;
炭条;
函数_name(foo);//返回int
函数_name(bar);//返回字符
}
编译器将尝试使用可用的模板定义进行各种类型组合,以输出有效的函数。如果成功,它将生成该类型的完整函数定义

回复:UserCPP:可能吗?模板T function_name{….},Mean函数不接受任何数据类型,我在主函数中写“variable=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
}
模板
无效函数名称(T&var){
//代码
}
int main(){
int foo;
炭条;
函数_name(foo);//将foo修改为int
函数_name(bar);//将bar修改为字符
}
您还可以显式声明类型:

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
}
模板
T函数_name(){
//代码
}
int main(){
int foo;
炭条;
foo=函数_name();//返回int
bar=函数_name();//返回字符
}
推荐阅读:


(特别是,)

不能接受int,unsigned long long,…像这里这样的数据类型吗?@UserCPP是的,可以;答案中最重要的部分是最后一句话。@UserCPP和no-每种类型都有一个不同的函数是的,看起来我只是在寻找这个。可能吗?模板T function_name{…},Mean函数不接受任何数据类型,在main函数中我写了“variable=function_name()”@UserCPP我用答案编辑了我的帖子,简短的答案是“否”,但有选项。