C++ 如何通过此类型的自动功能?

C++ 如何通过此类型的自动功能?,c++,c++11,parameter-passing,auto,C++,C++11,Parameter Passing,Auto,我试图将这个自动函数传递给另一个函数,但显然我不能传递一个自动类型,所以我可以将它更改为任何类型来传递它吗?通过谷歌搜索,我了解到你可以使用模板,但我们在课堂上还没有讨论过它们,所以如果有模板的话,我宁愿找一种更初级的方法 std::uniform_int_distribution<int> yPosition(lowBounds, 23); auto randY = std::bind(yPosition, std::ref(engine)); void my_funct

我试图将这个自动函数传递给另一个函数,但显然我不能传递一个自动类型,所以我可以将它更改为任何类型来传递它吗?通过谷歌搜索,我了解到你可以使用模板,但我们在课堂上还没有讨论过它们,所以如果有模板的话,我宁愿找一种更初级的方法

std::uniform_int_distribution<int> yPosition(lowBounds, 23);    
auto randY = std::bind(yPosition, std::ref(engine));

void my_function(??? randY)
{
}
std::统一内部分布位置(下限,23);
auto randY=std::bind(位置,std::ref(引擎));
无效我的函数(?randY)
{
}

传递自动类型的方法是使用模板。没有其他选择†

template <typename F>
void my_function(F randY)
{ ... }
模板
void my_函数(F randY)
{ ... }

†从技术上讲,概念中有一项建议允许使用my_功能(自动随机),但这只是一项建议。

来自:


正如其他答案所述,如果您希望函数采用与脱离绑定的类型完全相同的类型,则需要使用模板

但是,如果您只想在
my_function
中调用绑定函数,可以使用
std::function
std::function
使用类型擦除来抽象出完整的类型,从而为您提供了一种通用的方法来调用任何函数,比如放入其中的类型。当然,
std::function
会产生(少量)运行时开销

void my_function(std::function<int()> randY) { 
   //... 
   int y = randY();
   //...
}
void my_函数(std::function randY){
//... 
int y=randY();
//...
}

但在这种情况下,自动类型是什么?我不能把它改成任何类型吗?我是用auto在网上找到的,所以我不知道auto取代了什么。@AustinMW你不知道它实际上是什么类型的。看。啊,好吧,我以为有一种特定的类型我只是碰巧不知道。有一种特定的类型你不应该知道或关心。正如Quentin在上面所说,该类型是一个“可怕的嵌套元模板混乱”,但它仍然是一个特定的类型。你可以找到确切的类型(通过typeof或使用IDE),你可以把它写下来,这很少是正确的做法。谢谢你的澄清
template <class RandY>
void my_function(RandY &&randY) {...}
void my_function(std::function<int()> randY) { 
   //... 
   int y = randY();
   //...
}