std::bind 头文件声明
std::bind header file declaration
我想在我的主文件以外的 cpp 文件中为一个函数创建一个 std::bind
,并且也在不同的命名空间中。我遇到的问题是如何在头文件中声明所述函数,因为绑定本身取决于 main.cpp.
不可用的变量
是这样的:
function.cpp
#include "function.h"
namespace A{
void function(int i) { ... } // supposed to be invisible from outside
namespace A1{
int varA1;
auto func = std::bind(A::function, varA1);
}
namespace A2{
int varA2;
auto func = std::bind(A::function, varA2);
}
}
function.h
namespace A{
namespace A1{
auto func();
}
namespace A1{
auto func();
}
}
我知道上面的示例不起作用,但我该如何更改头文件以修复它?
我能看到的唯一解决方案是使用 std::function
,因为它几乎是唯一可以采用具有定义的 bind
object 的 object类型。
因此,如果我正确阅读了您的代码,它应该 return 类似于:
std::function<void()> func();
可以肯定的是,您知道您正在 header 中声明函数吗?为了匹配它,您的 cpp 文件应该更像:
namespace A1{
std::function<void()> func() {
int varA1;
return std::bind(A::function, varA1);
}
}
还要注意一些重要的事情,在您的情况下调用 std::bind
将复制您的变量。所以如果你想让你的结果函数在创建后看到你的变量的变化,你应该给它一个参考:
std::bind(A::function, std::cref(varA1));
我想在我的主文件以外的 cpp 文件中为一个函数创建一个 std::bind
,并且也在不同的命名空间中。我遇到的问题是如何在头文件中声明所述函数,因为绑定本身取决于 main.cpp.
是这样的:
function.cpp
#include "function.h"
namespace A{
void function(int i) { ... } // supposed to be invisible from outside
namespace A1{
int varA1;
auto func = std::bind(A::function, varA1);
}
namespace A2{
int varA2;
auto func = std::bind(A::function, varA2);
}
}
function.h
namespace A{
namespace A1{
auto func();
}
namespace A1{
auto func();
}
}
我知道上面的示例不起作用,但我该如何更改头文件以修复它?
我能看到的唯一解决方案是使用 std::function
,因为它几乎是唯一可以采用具有定义的 bind
object 的 object类型。
因此,如果我正确阅读了您的代码,它应该 return 类似于:
std::function<void()> func();
可以肯定的是,您知道您正在 header 中声明函数吗?为了匹配它,您的 cpp 文件应该更像:
namespace A1{
std::function<void()> func() {
int varA1;
return std::bind(A::function, varA1);
}
}
还要注意一些重要的事情,在您的情况下调用 std::bind
将复制您的变量。所以如果你想让你的结果函数在创建后看到你的变量的变化,你应该给它一个参考:
std::bind(A::function, std::cref(varA1));