std :: vector和嵌套模板的一些问题 [英] Some problems with std::vector and nested templates
问题描述
嗨
我正在努力做到以下几点。
#include< vector>
#include< boost / thread / mutex.hpp>
#include< boost / shared_ptr.hpp>
#include< boost / tuple / tuple。 hpp>
class {
boost :: mutex m_lock;
std :: vector< boost :: tuple< uint32_t, boost :: shared_ptr< T>
m_vector;
template< class Tboost :: shared_ptr< Tlist ::< T> getitem(uint32_t id )
{
boost :: mutex :: scoped_lock lock(m_lock);
std :: vector< boost :: tuple< uint32_t,boost :: shared_ptr< T
> :: iterator pos =
find_if(m_vector.begin(),m_vector.end(),compare_list< T>(id),
m_vector.begin());
if(pos!= m_vector.end())
return * pos;
返回boost :: shared_ptr(NULL);
};
但我收到以下错误
错误:预期'';''在''pos'''之前
我不明白为什么我得到这个错误因为std :: vector的定义
工作,它只是迭代器语句没有' 't。
jubelbrus写道:
嗨
我正在努力做到以下几点。
#include< vector>
#include< boost / thread / mutex.hpp>
#include< boost / shared_ptr。 hpp>
#include< boost / tuple / tuple.hpp>
class {
boost :: mutex m_lock;
std :: vector< boost :: tuple< uint32_t,boost :: shared_ptr< T>
m_vector;
我假设uint32_t可能在某个地方被打字。
什么是T?这不是模板吗?
template< class Tboost :: shared_ptr< Tlist ::< T> getitem(uint32_t id)
呵呵?
模板< class T>
boost :: shared_ptr< T>
list< T> :: getitem(uint32_t id)
?
什么是列表?
{
boost :: mutex :: scoped_lock lock(m_lock);
std :: vector< boost :: tuple< uint32_t,boost :: shared_ptr< T
>> :: iterator pos =
find_if(m_vector.begin(),m_vector.end(),compare_list< T>(id),
m_vector.begin());
typename std :: vector< boost :: tuple< uint32_t,boost :: shared_ptr< T
> :: iterator pos = find_if(...)
这里需要typename,因为vector< ...取决于T.
if(pos!= m_vector.end())
return * pos;
* pos是一个元组,而不是shared_ptr
return boost :: shared_ptr(NULL);
};
我收到以下错误
错误:预期'';''在''pos'之前''
我不明白为什么我得到这个错误因为std :: vector的定义
有效,它只是迭代器语句,不是。
-
rbh
对拼写错误感到抱歉...
这就是我要做的事情:
写一个模板类,存储一个boost :: shared_ptr< Twith
$的列表b $ ba索引并且是线程安全的,其中T将是该模板< class T>
stuff ..
我得到了getitem函数编译使用typename,tank ..但是
我发现插入代码存在一些编译问题。
#include< stdint.h>
#include< vector>
#include< boost / thread / mutex.hpp>
#include< boost / shared_ptr.hpp>
#include< boost / tuple / tuple.hpp>
模板< class T>
班级列表{
boost :: mutex m_lock;
std :: vector< boost :: tuple< uint32_t,boost :: shared_ptr< T>
m_vector ;
uint32_t m_nextid;
uint32_t insert(boost :: shared_ptr< T>);
}
模板< class T>
uint32_t list< T> :: insert(boost :: shared_ptr< T>)
{
typename boost :: tuples :: tuple< uint32_t,boost :: shared_ptr< T
add_item(m_nextid,item);
typename std :: vector< boost :: tuple< uint32_t,boost :: shared_ptr< T
m_vector;
boost :: mutex :: scoped_lock lock(m_lock);
m_vector.insert(add_item);
返回m_nextid ++;
};
我收到以下错误:
list。 h:在成员函数''uint32_t
stdtools :: list< T> :: insert(boost :: shared_ptr< T>)[with T = int]'':
tester_a.cpp:10:从这里实例化
list.h:90:错误:没有匹配函数来调用
''std :: vector< boost: :tuples :: tuple< uint32_t,boost :: shared_ptr< int>,
boost :: tuples :: null_type,boost :: tuples :: null_type,
boost: :tuples :: null_type,boost :: tuples :: null_type,
boost :: tuples :: null_type,boost :: tuples :: null_type,
boost :: tuples :: null_type,boost :: tuples :: null_type>,
std :: allocator< boost :: tuples :: tuple< uint32_t,boost :: shared_ptr< int>,
boost :: tuples :: null_type,boost :: tuples :: null_type,
boost :: tuples :: null_type,boost :: tuples :: null_type,
boost :: tuples :: null_type,boost :: tuples :: null_type,
boost :: tuples: :null_type,boost :: tuples :: null_type
> :: insert(boost :: tuples :: tuple< uint32_t,boost :: shared_ptr< int>,
boost :: tuples :: null_type,boost :: tuples :: null_type,
boost :: tuples :: null_type,boost: :tuples :: null_type,
boost :: tuples :: null_type,boost :: tuples :: null_type,
boost :: tuples :: null_type,boost :: tuples :: null_type>&)''
/usr/include/c++/4.0.0/bits/vector.tcc:93:注意:候选人是:
typename std :: vector< _Tp,_Alloc> :: iterator std :: vector< _Tp,
_Alloc> :: insert(__ gnu_cxx :: __ normal_iterator< typen ame _Alloc :: pointer,
std :: vector< _Tp,_Alloc,const _Tp&)[with _Tp =
boost :: tuples :: tuple< uint32_t,boost :: shared_ptr< int>,
boost :: tuples :: nul l_type,boost :: tuples :: null_type,
boost :: tuples :: null_type,boost :: tuples :: null_type,
boost :: tuples :: null_type, boost :: tuples :: null_type,
boost :: tuples :: null_type,boost :: tuples :: null_type>,_ Alloc =
std :: allocator< boost: :tuples :: tuple< uint32_t,boost :: shared_ptr< int>,
boost :: tuples :: null_type,boost :: tuples :: null_type,
boost: :tuples :: null_type,boost :: tuples :: null_type,
boost :: tuples :: null_type,boost :: tuples :: null_type,
boost :: tuples :: null_type,boost :: tuples :: null_type]
/usr/include/c++/4.0.0/bits/stl_vector.h:657:note:
void std :: vector< _Tp,
_Alloc> :: insert(__ gnu_cxx :: __ normal_iterator< typen ame _Alloc :: pointer,
std :: vector< _Tp,_Alloc, size_t,const _Tp&)[with _Tp =
boost :: tuples :: tuple< uint32_t,boost :: shared_ptr< int>,
boost :: tuples :: null_type,boost :: tuples :: null_type,
boost: :tuples :: null_type,boost :: tuples :: null_type,
boost :: tuples :: null_type,boost :: tuples :: null_type,
boost :: tuples :: null_type,boost :: tuples :: null_type>,_ Alloc =
std :: allocator< boost :: tuples :: tuple< uint32_t,boost :: shared_ptr< int>,
boost :: tuples :: null_type,boost :: tuples :: null_type,
boost :: tuples :: null_type,boost :: tuples :: null_type,
boost :: tuples :: null_type,boost :: tuples :: null_type,
boost :: tuples :: null_type,boost :: tuples :: null_type]
任何人?
jubelbrus写道:
对于拼写错误感到抱歉。 ..
这就是我想要做的:
写一个模板类,它存储一个boost :: shared_ptr< Twith
a索引并且是线程安全的,其中T将是该模板< class T>
stuff ..
我得到了getitem功能由usi编译ng typename,坦克..但
我发现插入代码存在一些编译问题。
#include< stdint.h>
#include< vector>
#include< boost / thread / mutex.hpp>
#include< boost / shared_ptr.hpp>
#include< boost / tuple / tuple.hpp>
模板< class T>
班级列表{
boost :: mutex m_lock;
std :: vector< boost :: tuple< uint32_t,boost :: shared_ptr< T>
m_vector ;
uint32_t m_nextid;
uint32_t insert(boost :: shared_ptr< T>);
}
模板< class T>
uint32_t list< T> :: insert(boost :: shared_ptr< T>)
{
typename boost :: tuples :: tuple< uint32_t,boost :: shared_ptr< T
add_item(m_nextid,item);
typename std :: vector< boost :: tuple< uint32_t,boost :: shared_ptr< T
> m_vector;
boost :: mutex :: scoped_lock lock(m_lock);
m_vector.insert(add_item);
也许你的意思是
m_vector.push_back(add_item);
没有一个名为insert的向量方法只需要一个参数。
john
Hi
I''m trying to do the following.
#include <vector>
#include <boost/thread/mutex.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/tuple/tuple.hpp>
class {
boost::mutex m_lock;
std::vector<boost::tuple<uint32_t, boost::shared_ptr<T >
m_vector;
template <class Tboost::shared_ptr<Tlist::<T>getitem(uint32_t id)
{
boost::mutex::scoped_lock lock(m_lock);
std::vector< boost::tuple<uint32_t, boost::shared_ptr<T
>::iterator pos =
find_if(m_vector.begin(), m_vector.end(), compare_list<T>(id),
m_vector.begin());
if (pos != m_vector.end())
return *pos;
return boost::shared_ptr(NULL);
};
but I get the following error
error: expected '';'' before ''pos''
I don''t understand why I''m getting this error because the definition
of std::vector works, it''s just the iterator statement that doesn''t.
jubelbrus wrote:
Hi
I''m trying to do the following.
#include <vector>
#include <boost/thread/mutex.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/tuple/tuple.hpp>
class {
boost::mutex m_lock;
std::vector<boost::tuple<uint32_t, boost::shared_ptr<T >
m_vector;I''m assuming uint32_t might be typedefed somewhere.
What''s T? This is not a template?
template <class Tboost::shared_ptr<Tlist::<T>getitem(uint32_t id)huh?
template <class T>
boost::shared_ptr<T>
list<T>::getitem(uint32_t id)
?
What''s list?
{
boost::mutex::scoped_lock lock(m_lock);
std::vector< boost::tuple<uint32_t, boost::shared_ptr<T>>::iterator pos =find_if(m_vector.begin(), m_vector.end(), compare_list<T>(id),
m_vector.begin());typename std::vector<boost::tuple<uint32_t, boost::shared_ptr<T
>::iterator pos = find_if(...)You need typename here, because vector< ... is dependent on T.
if (pos != m_vector.end())
return *pos;*pos is a tuple, not a shared_ptr
return boost::shared_ptr(NULL);
};
but I get the following error
error: expected '';'' before ''pos''
I don''t understand why I''m getting this error because the definition
of std::vector works, it''s just the iterator statement that doesn''t.--
rbh
Sorry about the misspellings...
This is what I''m trying to do:
Write a template class that stores a list of boost::shared_ptr<Twith
a index and is thread safe, where T would be that template <class T>
stuff..
I got the getitem function compiling by using typename, tanks.. but
I''ve discovered some compile problems with my insert code.
#include <stdint.h>
#include <vector>
#include <boost/thread/mutex.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/tuple/tuple.hpp>
template <class T>
class list{
boost::mutex m_lock;
std::vector<boost::tuple<uint32_t, boost::shared_ptr<T >
m_vector;
uint32_t m_nextid;
uint32_t insert(boost::shared_ptr<T>);
}
template <class T>
uint32_t list<T>::insert(boost::shared_ptr<T>)
{
typename boost::tuples::tuple<uint32_t, boost::shared_ptr<T
add_item(m_nextid, item);
typename std::vector<boost::tuple<uint32_t, boost::shared_ptr<Tm_vector;boost::mutex::scoped_lock lock(m_lock);
m_vector.insert( add_item );
return m_nextid++;
};
I get the following error:
list.h: In member function ''uint32_t
stdtools::list<T>::insert(boost::shared_ptr<T>) [with T = int]'':
tester_a.cpp:10: instantiated from here
list.h:90: error: no matching function for call to
''std::vector<boost::tuples::tuple<uint32_t, boost::shared_ptr<int>,
boost::tuples::null_type, boost::tuples::null_type,
boost::tuples::null_type, boost::tuples::null_type,
boost::tuples::null_type, boost::tuples::null_type,
boost::tuples::null_type, boost::tuples::null_type>,
std::allocator<boost::tuples::tuple<uint32_t, boost::shared_ptr<int>,
boost::tuples::null_type, boost::tuples::null_type,
boost::tuples::null_type, boost::tuples::null_type,
boost::tuples::null_type, boost::tuples::null_type,
boost::tuples::null_type, boost::tuples::null_type>::insert(boost::tuples::tuple<uint32_t, boost::shared_ptr<int>,boost::tuples::null_type, boost::tuples::null_type,
boost::tuples::null_type, boost::tuples::null_type,
boost::tuples::null_type, boost::tuples::null_type,
boost::tuples::null_type, boost::tuples::null_type>&)''
/usr/include/c++/4.0.0/bits/vector.tcc:93: note: candidates are:
typename std::vector<_Tp, _Alloc>::iterator std::vector<_Tp,
_Alloc>::insert(__gnu_cxx::__normal_iterator<typen ame _Alloc::pointer,
std::vector<_Tp, _Alloc, const _Tp&) [with _Tp =
boost::tuples::tuple<uint32_t, boost::shared_ptr<int>,
boost::tuples::null_type, boost::tuples::null_type,
boost::tuples::null_type, boost::tuples::null_type,
boost::tuples::null_type, boost::tuples::null_type,
boost::tuples::null_type, boost::tuples::null_type>, _Alloc =
std::allocator<boost::tuples::tuple<uint32_t, boost::shared_ptr<int>,
boost::tuples::null_type, boost::tuples::null_type,
boost::tuples::null_type, boost::tuples::null_type,
boost::tuples::null_type, boost::tuples::null_type,
boost::tuples::null_type, boost::tuples::null_type]
/usr/include/c++/4.0.0/bits/stl_vector.h:657: note:
void std::vector<_Tp,
_Alloc>::insert(__gnu_cxx::__normal_iterator<typen ame _Alloc::pointer,
std::vector<_Tp, _Alloc, size_t, const _Tp&) [with _Tp =
boost::tuples::tuple<uint32_t, boost::shared_ptr<int>,
boost::tuples::null_type, boost::tuples::null_type,
boost::tuples::null_type, boost::tuples::null_type,
boost::tuples::null_type, boost::tuples::null_type,
boost::tuples::null_type, boost::tuples::null_type>, _Alloc =
std::allocator<boost::tuples::tuple<uint32_t, boost::shared_ptr<int>,
boost::tuples::null_type, boost::tuples::null_type,
boost::tuples::null_type, boost::tuples::null_type,
boost::tuples::null_type, boost::tuples::null_type,
boost::tuples::null_type, boost::tuples::null_type]
Anybody??
jubelbrus wrote:Sorry about the misspellings...
This is what I''m trying to do:
Write a template class that stores a list of boost::shared_ptr<Twith
a index and is thread safe, where T would be that template <class T>
stuff..
I got the getitem function compiling by using typename, tanks.. but
I''ve discovered some compile problems with my insert code.
#include <stdint.h>
#include <vector>
#include <boost/thread/mutex.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/tuple/tuple.hpp>
template <class T>
class list{
boost::mutex m_lock;
std::vector<boost::tuple<uint32_t, boost::shared_ptr<T >
m_vector;
uint32_t m_nextid;
uint32_t insert(boost::shared_ptr<T>);
}
template <class T>
uint32_t list<T>::insert(boost::shared_ptr<T>)
{
typename boost::tuples::tuple<uint32_t, boost::shared_ptr<T
add_item(m_nextid, item);
typename std::vector<boost::tuple<uint32_t, boost::shared_ptr<T>m_vector;
boost::mutex::scoped_lock lock(m_lock);
m_vector.insert( add_item );Perhaps you mean
m_vector.push_back( add_item );
There is no method of vector called insert that takes a single argument.
john
这篇关于std :: vector和嵌套模板的一些问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!