I've been trying to figure out how to properly instantiate a vector of std::pairs of std::functions (e.g. std::vector<std::pair<std::function<bool()>, std::function<void(int)>>>
). Upon doing so however, Visual Studios 15 gives me a red underlining warning in my code even though it still compiles. I decided to start with just a basic std::function
initialization using std::bind
, but that too gave me an underlining error that compiles.
I kind of understand it's that std::bind
doesn't return an std::function
, but I've seen numerous examples of instantiating std::function
s the way I do with the second underlining/warning.
Am I setting myself up for failure here, or is visual studios just giving me a false positive on these errors?
CODE:
#include <functional>
#include <vector>
class A {
public:
bool myFunc() {
return false;
};
void myDoFunc(int x) {
std::cout << "HiXXX";
};
class Seq{
public:
std::vector<std::pair<std::function<bool()>, std::function<void(int)>>> sequencePieces;
const char* name;
Seq(const char* _name, std::vector<std::pair<std::function<bool()>, std::function<void(int)>>> _sequencePieces):
name(_name),
sequencePieces(_sequencePieces)
{}
};
std::function<bool()> sequenceStep;
Seq seq1;
A() :
seq1( "ASDF",
{
/*Error 1*/
std::pair<std::function<bool()>, std::function<void(int)>>(
std::bind(&A::myFunc,this),
std::bind(&A::myDoFunc, this, 1)
)
}
)
{
/*Error 2*/
sequenceStep = std::bind(&A::myFunc, *this);
};
};