std :: bind头文件声明

时间:2015-11-24 10:43:44

标签: c++ c++11 header-files declaration stdbind

我想为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();
    }
}

我知道上面的示例不起作用,但如何更改头文件以修复它?

1 个答案:

答案 0 :(得分:0)

我能看到的唯一解决方案是使用std::function,因为它几乎是唯一可以使用定义类型的bind对象的对象。

所以,如果我正确地读了你的代码,它应该返回类似的东西:

std::function<void()> func();

只是为了确定,您知道您在标题中声明了功能吗?要匹配它,您的cpp文件应该更像:

namespace A1{
    std::function<void()> func() {
        int varA1;
        return std::bind(A::function, varA1);
    }
}

另外注意一些重要的事情,在您的案例中调用std::bind会复制您的变量。因此,如果您希望生成的函数在创建后看到变量的更改,您应该给它一个参考:

std::bind(A::function, std::cref(varA1));