由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 如何 define/initialize static data member of a class templ
相关主题
这两个地方是否需要typename?typedef 的一个问题
Cannot use my own container as the underlying container of a stack? (c++)c++ template question:
c++ template question:C++ template
boost::function 的 syntax 问题今天没有上班,说一个FEATURE吧,concept lite
一个partial specialization的问题C++中size_type怎么处理?
C++ question about template typedef一个C++ template的问题
C++里get array size的问题 (转载)STL感觉实在太变态了
C++ 菜鸟问一个关于template 的问题。有段c++代码看不懂
相关话题的讨论汇总
话题: container话题: type话题: stack话题: typename话题: size
进入Programming版参与讨论
1 (共1页)
r****t
发帖数: 10904
1
非 template 情况似乎比较清楚了,class template 里面的 static data
member 的定义和初始化有没有啥龟腚?
举个例子:
template
class StackWithCapacity : public stack_adapter
{
public:
typedef typename stack_adapter< Container>::size_type size_type;
private:
static const size_type capacity = 5;
};
capacity 是个 static const member, 我就直接在 class body 里面初始化了,
据 c++ primer,class body 外面还必须 define without initializer (虽然我我不这么做也能编译并运行正常). 这样我就在外面加
template
StackWithCapacity::capacity; // line 38
没想到编译不过(看不懂出错信息):
stackset.cpp:38: error: expected constructor, destructor, or type conversion
before ';' token
问题:1. 这个地方如何写才正确?2.如果不是 const, 就是 static size_type
capacity; 的话,应该在哪个地方 intialize and/or define?
谢谢!最小代码贴在后面:
// main.cpp
#include
#include
#include
#include
#include "stack.h"
using namespace std;
template
class StackWithCapacity : public stack_adapter< Container >
{
public:
// as .size method need access to size_type
typedef typename stack_adapter::size_type size_type;
typedef typename stack_adapter::value_type value_type;
bool isAtCapacity () {
return this->size() >= capacity;
}
void push( const value_type &value ) {
if (!isAtCapacity() )
stack_adapter< Container >::push( value );
else
cout << "error: stack full..." << endl;
}
private:
static const size_type capacity = 5;
};
template
size_type StackWCap::capacity;
int main(int argc, char* argv[]){}
//stack.h:
#ifndef STACK_H
#define STACK_H
template
class stack_adapter
{
private:
typedef T container_type;
container_type m_stack;
public:
typedef typename T::value_type value_type;
typedef typename T::size_type size_type;
void push(const value_type & value) {
this->m_stack.push_front( value );
}
void pop() {
this->m_stack.pop_front();
}
const value_type & top() const {
return this->m_stack.front(); // this is undefined when m_stack is empty
}
value_type & top() {
return this->m_stack.front();
}
size_type size() {
return this->m_stack.size();
}
};
#endif
t****t
发帖数: 6806
2
你定义对象不给类型的?

化有没有啥龟腚?举个例子:

【在 r****t 的大作中提到】
: 非 template 情况似乎比较清楚了,class template 里面的 static data
: member 的定义和初始化有没有啥龟腚?
: 举个例子:
: template
: class StackWithCapacity : public stack_adapter
: {
: public:
: typedef typename stack_adapter< Container>::size_type size_type;
: private:
: static const size_type capacity = 5;

r****t
发帖数: 10904
3
太乌龙了,可是
template
StackWithCapacity::size_type StackWithCapacity::
capacity;
or
template
size_type StackWithCapacity::capacity;
也出一模一样的错误,这个我实在是搞不懂。。

【在 t****t 的大作中提到】
: 你定义对象不给类型的?
:
: 化有没有啥龟腚?举个例子:

t****t
发帖数: 6806
4
template
typename StackWithCapacity::size_type StackWithCapacity::capacity;

太乌龙了,可是
template
StackWithCapacity::size_type StackWithCapacity::
capacity;
or
template
size_type StackWithCapacity::capacity;
也出一模一样的错误,这个我实在是搞不懂。。

【在 r****t 的大作中提到】
: 太乌龙了,可是
: template
: StackWithCapacity::size_type StackWithCapacity::
: capacity;
: or
: template
: size_type StackWithCapacity::capacity;
: 也出一模一样的错误,这个我实在是搞不懂。。

r****t
发帖数: 10904
5
看到解答才惊觉此问好像在板上问过三四次了,幸苦师父了!

【在 t****t 的大作中提到】
: template
: typename StackWithCapacity::size_type StackWithCapacity::capacity;
:
: 太乌龙了,可是
: template
: StackWithCapacity::size_type StackWithCapacity::
: capacity;
: or
: template
: size_type StackWithCapacity::capacity;

y**b
发帖数: 10166
6
这个问题c++ primer就强调了必须用typename显式告诉编译器这是一个类型,
否则可能当作一个数据成员。

【在 r****t 的大作中提到】
: 非 template 情况似乎比较清楚了,class template 里面的 static data
: member 的定义和初始化有没有啥龟腚?
: 举个例子:
: template
: class StackWithCapacity : public stack_adapter
: {
: public:
: typedef typename stack_adapter< Container>::size_type size_type;
: private:
: static const size_type capacity = 5;

1 (共1页)
进入Programming版参与讨论
相关主题
有段c++代码看不懂一个partial specialization的问题
a c++ question for templateC++ question about template typedef
a c++ questionC++里get array size的问题 (转载)
Any difference between class and typename identifier?C++ 菜鸟问一个关于template 的问题。
这两个地方是否需要typename?typedef 的一个问题
Cannot use my own container as the underlying container of a stack? (c++)c++ template question:
c++ template question:C++ template
boost::function 的 syntax 问题今天没有上班,说一个FEATURE吧,concept lite
相关话题的讨论汇总
话题: container话题: type话题: stack话题: typename话题: size