Я пытаюсь реализовать функцию, которая позволяет мне сделать такой вызов
// veca is a vector of tuples in my case
columnViewOfTuple<0>(veca);
Я реализовал такую функцию следующим образом
template<int N>
struct myfunction {
template<typename T, typename R>
std::vector<R> operator() (T& container)
{
std::vector<R> myvector;
for(typename T::iterator it = container.begin(); it!=container.end(); it++)
myvector.push_back((R)(*it).template get<N>());
return myvector;
}
};
всякий раз, когда я вызываю myfunction‹0>(vec5), где vec5 — некоторый вектор кортежей, он говорит
main.cpp: в функции 'int main()': main.cpp:156: ошибка: конфликтующее объявление 'myfunction‹0> vec5' main.cpp:155: ошибка: 'vec5' имеет предыдущее объявление как 'main() ::vec1_t vec5'
Ребята, вы знаете, как это исправить?
Спасибо
myfunction<0>()(vec5);
:myfunction
- это не функция, это класс: вы должны создать его экземпляр, прежде чем вы сможете вызватьoperator()
. Но я не уверен, что это сработает, потому что я не пробовал. Я не думаю, что параметр шаблона R можно вывести, поэтому на самом деле вам нужноmyfunction<0>().operator()<R>(vec5);
, где R заменен типом значенияvec5
. - person Steve Jessop   schedule 02.10.2010