假设我正在使用一个模板类,其中包含一些简单的内容:
template <class T>
class MyClass
我想使用 T 命名空间中的元素,例如 T 可能是字符串,我想使用
T::const_iterator myIterator;
...或者类似的东西。我该如何实现呢? 可能不可能或者非常简单,但我一点都不知道。
谢谢回答!
假设我正在使用一个模板类,其中包含一些简单的内容:
template <class T>
class MyClass
我想使用 T 命名空间中的元素,例如 T 可能是字符串,我想使用
T::const_iterator myIterator;
...或者类似的东西。我该如何实现呢? 可能不可能或者非常简单,但我一点都不知道。
谢谢回答!
T
是一个模板参数(例如在您的示例中),则假定 T::some_member
不是类型名称。您需要显式指定它是类型名,通过在其前面加上 typename
:typename T::const_iterator myIterator;
// multiplication, or declaration of a pointer?
T::const_iterator * myIterator;
template< typename T >
class Example
{
void foo( const T& t )
{
typedef typename T::value_type Type;
typedef typename T::const_iterator Iter;
Iter begin = t.begin();
Iter end = t.end();
std::copy( begin, end, std::ostream_iterator<Type>(std::cout) );
}
};