如何找出nviews向量的返回类型
How to figure out the return type of a vector of nviews
我有以下问题:
template <int N, typename T>
/*what is the return type*/ nviewgetter( T const& t )
{
typename T::const_iterator it(t.begin());
typedef BOOST_TYPEOF_TPL(*it) etype;
typedef typename boost::fusion::result_of::as_nview<etype, N>::type netype;
std::vector<netype> r;
while(it!=t.end()){
r.push_back( boost::fusion::as_nview<N>(*it) );
it++;
}
//return r;
}
期望的是T是前向序列的序列(例如boost::fusion::vector),我想获得T的每个元素中的第n个元素的视图。但是,我事先不知道boost::fusion::vector
的类型,例如boost::fusion::vector<int, double>
或boost::fusion::vector<int, double, std::string>
。在代码中,我可以找出正确的类型,但我不能在函数声明中找出这一点。
谢谢!
也欢迎对代码改进提出任何建议。:)
如果你不想写出完整的类型,你可以将类型定义移动到一个单独的模板中,这样当你声明函数模板时它们就可用了;比如:
template <int N, typename T>
struct nviewgetter_traits
{
typedef BOOST_TYPEOF_TPL(typename T::value_type) etype;
typedef typename boost::fusion::result_of::as_nview<etype, N>::type netype;
typedef std::vector<netype> result_type;
// Or combine it into a single monstrosity if you prefer:
// typedef std::vector<
// typename boost::fusion::result_of::as_nview<
// BOOST_TYPEOF_TPL(typename T::value_type), N
// >::type> result_type;
};
template <int N, typename T>
typename nviewgetter_traits<N,T>::result_type nviewgetter(T const & t)
{
typename nviewgetter_traits<N,T>::result_type r;
for (auto it = t.begin(); it != t.end(); ++it) {
r.push_back( boost::fusion::as_nview<N>(*it) );
}
return r;
};
相关文章:
- 如何获取std::result_of函数的返回类型
- 奇怪的结构&GCC&clang(void*返回类型)
- 如何建立使用模板函数的lambda函数的尾部返回类型
- 为什么与常规GCC不同,即使有"学究性错误",MinGW-GCC也能容忍丢失的返回类型
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 函数作为模板参数,是否对返回类型强制约束
- C++中函数的向量返回类型引发错误
- 检查函数返回类型是否与STL容器类型值相同
- 为什么返回类型中需要typename?C++
- <Windows>为什么 std::thread::native_handle 返回类型为"long long unsigned int"的值,而不是 void*(又名 HANDLE)?
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 为什么 c++(g++) 不允许模板返回类型和函数名称之间有空格?
- 在C++中使用成员函数向量时,有没有办法实现协变返回类型
- 调用函数时,如何通过向量返回类型
- 如果返回了向量的一个项,lambda表达式的返回类型是什么
- C++返回一个向量(将 int 转换为非标量类型)
- 向量的返回类型
- 返回 TCHAR * 类型向量的函数未正确返回它
- 如何找出nviews向量的返回类型