我正在尝试将此自动函数传递给另一个函数,但显然我无法传递自动类型,因此我可以将其更改为实际类型以便传递它吗?通过谷歌搜索,我读到你可以使用模板,但我们没有在我的班级中查看它们,所以如果有的话,我宁愿找一个更初学的方法。
std::uniform_int_distribution<int> yPosition(lowBounds, 23);
auto randY = std::bind(yPosition, std::ref(engine));
void my_function(??? randY)
{
}
答案 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();
//...
}