c – 在函数中接受所有类型作为参数

我怎么能在C中使一个函数接受每个Object,所以我可以给它数字,字符串或其他对象.我在C方面表现不佳,我希望这不是一个完全愚蠢的问题……

编辑:好的,一个例子:如果你想尝试将std :: cout流包装到普通函数中,那么该函数应该能够接受所有内容 – 从浮点数上的整数到复杂对象.我希望现在更清楚了!

你可以为不同的类型重载你的功能,即

size_t func(int);
size_t func(std::string);

或者和/或另外,您可以提供一个函数模板,这是一种告诉编译器如何为任何特定类型生成函数的方法,例如

template<typename T>
size_t func(T const&) { return sizeof(T); }

您可以使用更高级的技术(如SFINAE)来有效地重载这些模板函数,即对不同类型的T使用不同的模板(即整数类型,指针,内置类型,pod等).然后编译器将为它遇到的任何函数调用选择最合适的func()(如果有的话),如果这是一个模板,则生成一个适当的函数.
这不需要重新编码.

一种完全不同的方法是使用通用擦除类型,例如boost :: any,当函数需要在编码时解析期望的类型(而不是编译时):

size_t func(boost::any const&x)
{
  auto i = boost::any_cast<const int*>(x);
  if(i) return func(*i);
  // etc for other types, but this must be done at coding time!
}
翻译自:https://stackoverflow.com/questions/28096863/accept-all-types-as-argument-in-function

转载注明原文:c – 在函数中接受所有类型作为参数