every body:
& n: D/ s) |4 U6 o3 d$ e1 A8 j4 r 我定义两个模板template1和template2;template1中具现template2并使用之;用法是调用template2的一个模块 函数。在gcc下会出现语法错误,找了很久无法突破!有那位朋友知道错在哪里,恳请告之,谢谢!GCC版本:3.3.4。示例代码如下:
复制内容到剪贴板
代码:
[color=DarkGreen]/*
* here is test.h
*/[/color]
struct svalue [color=DarkGreen] //template1要具现的类型[/color]
{
int v1;
int v2;
};
template<class T>
struct s_range_key_equal [color=DarkGreen] //函数子,仿函数[/color]
{
bool operator() (int key,const T* pval)
{
if (key>=pval->v1 && key<pval->v2)
return true;
return false;
}
};
[color=DarkGreen]//模板对象2[/color]
template<typename T>
class CTemplate2
{
public:
template<typename F>
bool find_if(const int key)
{
F f;
T val;
val.v1 = 0;
val.v2 = 1;
return f(key,&val);
}
};
[color=DarkGreen]//模板对象1[/color]
template<typename T>
class CTemplate1
{
public:
bool method(const int key)
{
typedef s_range_key_equal<svalue> vltype;
return m_example.find_if<vltype>(key); [color=DarkGreen]//在这里提示语法错误[/color]
}
private:
CTemplate2<svalue> m_example;
};
[color=DarkGreen]/*
* here is test.cpp
*/[/color]
#include <sys/types.h>
#include "test.h"
int main(int argc,char* argv[])
{
CTemplate1<svalue> t1;
if (t1.method(0))
return -1;
return 0;
}