是否可以執行以下操作。Boost元組+變換
說我升壓元組具有<std::string, T>
我想使用std ::變換+ mem_fun在相應的矢量僅插入的std :: string元素。是否有可能還是我們需要使用一個循環和的push_back(獲得< 0>)...
即下面不喜歡編譯...(未知類型...)
result.resize(storage.size())
std::transform(storage.begin(), storage.end(), result.begin(), std::mem_fun(&boost::get<0>));
這裏是(嘗試一個評論)一個例子:
#include <boost/tuple/tuple.hpp>
#include <vector>
#include <string>
#include <algorithm>
#include <boost/bind.hpp>
template <typename T>
class TestClass
{
private:
typedef boost::tuple<std::string,T> PairType;
std::vector<PairType> storage;
public:
void extract(std::vector<std::string> &result)
{
result.resize(storage.size());
std::transform(storage.begin(), storage.end(), result.begin(), boost::bind(&PairType::get<0>, _1));
}
};
int main(int argc, char**argv)
{
TestClass<int> bb;
std::vector< std::string> result;
bb.extract(result);
return 0;
}
g++ test.cpp
test.cpp: In member function `void TestClass<T>::extract(std::vector<std::string, std::allocator<std::string> >&)':
test.cpp:17: error: expected primary-expression before ',' token
test.cpp: In member function `void TestClass<T>::extract(std::vector<std::string, std::allocator<std::string> >&) [with T = int]':
test.cpp:26: instantiated from here
test.cpp:17: error: address of overloaded function with no contextual type information
您需要提供更多的代碼和編譯器嘔吐。 – 2011-01-13 01:42:54