如何通过这种类型的自动功能?

时间:2015-07-30 15:19:56

标签: c++ c++11 parameter-passing auto

我正在尝试将此自动函数传递给另一个函数,但显然我无法传递自动类型,因此我可以将其更改为实际类型以便传递它吗?通过谷歌搜索,我读到你可以使用模板,但我们没有在我的班级中查看它们,所以如果有的话,我宁愿找一个更初学的方法。

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

void my_function(??? randY)
{
}

3 个答案:

答案 0 :(得分:8)

来自std::bind

template <class F, class... Args>
/*unspecified*/ bind( F&& f, Args&&... args );

您要查找的类型未指定。当然,它是一种实际类型,但无论您选择哪种标准库,它都不是您可以轻松拼写出来的。即使你可以,它可能是一堆乱七八糟的嵌套元模板,你不会想要拼出来。
谢谢,auto

您唯一的解决方案是让my_function成为模板:

template <class RandY>
void my_function(RandY &&randY) {...}

答案 1 :(得分:2)

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

template <typename F>
void my_function(F randY)
{ ... }

<小时/> †​​从技术上讲,概念中有一项提案允许my_function(auto randY),但这只是一个提案。

答案 2 :(得分:2)

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

但是,如果您只想要一种方法来调用my_function内的绑定函数,则可以使用std::function<>std::function使用 type-erasure 来抽象出完整类型,为您提供一种通用方法来调用您放入其中的任何类似函数的类型。当然std::function会产生(小)运行时开销。

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