如何传递这种类型的自动功能?
How to pass this type auto function?
我正在尝试将此自动函数传递给另一个函数,但显然我无法传递自动类型,所以我可以将其更改为实际类型以传递它吗?通过谷歌搜索,我了解到您可以使用模板,但我们还没有在我的 class 中详细介绍它们,所以如果有的话,我宁愿找到一种更初学者的方法。
std::uniform_int_distribution<int> yPosition(lowBounds, 23);
auto randY = std::bind(yPosition, std::ref(engine));
void my_function(??? randY)
{
}
传递自动类型的方法是使用模板。别无选择†
template <typename F>
void my_function(F randY)
{ ... }
†从技术上讲,概念中有一个提案允许 my_function(auto randY)
,但这只是一个提案。
来自std::bind
:
template <class F, class... Args>
/*unspecified*/ bind( F&& f, Args&&... args );
您要查找的类型未指定。当然,它是一种实际类型,但它是您的标准库选择的任何类型,而不是您可以移植地拼写出来的类型。即使可以,它也可能是嵌套元模板的可怕混乱,您 不想 拼写出来。
谢谢,auto
!
您唯一的解决办法是制作 my_function
模板 :
template <class RandY>
void my_function(RandY &&randY) {...}
正如其他答案所述,如果您希望函数采用完全相同的绑定类型,则需要使用模板。
但是,如果您只想调用 my_function
内的绑定函数,您可以使用 std::function<>
。 std::function
使用 type-erasure 抽象出完整的类型,让你有一个通用的方法来调用你放入其中的任何类似函数的类型。当然 std::function
会产生(小的)运行 时间开销。
void my_function(std::function<int()> randY) {
//...
int y = randY();
//...
}
我正在尝试将此自动函数传递给另一个函数,但显然我无法传递自动类型,所以我可以将其更改为实际类型以传递它吗?通过谷歌搜索,我了解到您可以使用模板,但我们还没有在我的 class 中详细介绍它们,所以如果有的话,我宁愿找到一种更初学者的方法。
std::uniform_int_distribution<int> yPosition(lowBounds, 23);
auto randY = std::bind(yPosition, std::ref(engine));
void my_function(??? randY)
{
}
传递自动类型的方法是使用模板。别无选择†
template <typename F>
void my_function(F randY)
{ ... }
†从技术上讲,概念中有一个提案允许
my_function(auto randY)
,但这只是一个提案。
来自std::bind
:
template <class F, class... Args> /*unspecified*/ bind( F&& f, Args&&... args );
您要查找的类型未指定。当然,它是一种实际类型,但它是您的标准库选择的任何类型,而不是您可以移植地拼写出来的类型。即使可以,它也可能是嵌套元模板的可怕混乱,您 不想 拼写出来。
谢谢,auto
!
您唯一的解决办法是制作 my_function
模板 :
template <class RandY>
void my_function(RandY &&randY) {...}
正如其他答案所述,如果您希望函数采用完全相同的绑定类型,则需要使用模板。
但是,如果您只想调用 my_function
内的绑定函数,您可以使用 std::function<>
。 std::function
使用 type-erasure 抽象出完整的类型,让你有一个通用的方法来调用你放入其中的任何类似函数的类型。当然 std::function
会产生(小的)运行 时间开销。
void my_function(std::function<int()> randY) {
//...
int y = randY();
//...
}