2011-02-10 33 views
0

我有以下代碼:無法使用使用模板作爲方法參數的結構

template <typename A, typename B> 
struct TheStruct { 
    A a; 
    B b; 
}; 

class TheClass { 
public: 
    void do_something(TheStruct<A,B> blah); 
} 

我上do_somethng方法類似於error: 'A' was not declared in this scope編譯器錯誤...

什麼是在方法參數中定義這種類型的正確語法?

謝謝!

+0

什麼是`TheClass`中的A和B? – kennytm 2011-02-10 18:20:50

+0

我假設它們與TheStruct中的A和B相同? – 2011-02-10 18:24:46

回答

2

你需要要麼使TheClass模板:

template <typename A, typename B> 
class TheClass { 
public: 
    void do_something(TheStruct<A,B> blah); 
}; 

或者你需要做do_something()模板:

class TheClass { 
public: 
    template <typename A, typename B> 
    void do_something(TheStruct<A,B> blah); 
}; 
+0

不正確。看到我的回答 – TonyK 2011-02-10 18:27:05

0

A和B是在模板定義只是佔位符。爲了更清楚:你的模板定義在語義上是一樣的

template <typename TotallyDifferentA, typename TotallyDifferentB> 
struct TheStruct { 
    TotallyDifferentA a; 
    TotallyDifferentB b; 
}; 

所以這並不奇怪,

void do_something(TheStruct<A,B> blah); 

不能編譯。 A和B沒有定義。這彙編:

class TheClass { 
public: 
    void do_something(TheStruct<int,void(*)(double,char*)> blah); 
} ; 
0

這取決於。你想do_something上的TheStruct,或一個特定的一個任何版本(例如在類型AintBdouble

對於你需要做任何TheClassdo_something也是一個模板第一種情況(例如,從@PigBen搶下):

template <typename A, typename B> 
class TheClass { 
public: 
    void do_something(TheStruct<A,B> blah); 
}; 

OR

class TheClass { 
public: 
    template <typename A, typename B> 
    void do_something(TheStruct<A,B> blah); 
}; 

如果你只需要使用的一個具體實例TheStruct然後你指定確切的類型:

class TheClass { 
public: 
    void do_something(TheStruct<int, double> blah); 
} 
相關問題