C ++将内部结构作为参数传递

时间:2012-01-25 20:16:41

标签: c++ templates struct parameter-passing inner-classes

存在包含内部结构TIn的结构TOut:

template <typename T>
struct TOut
{
    struct TIn
    {
            bool b;
    };

    TIn in;
T t;
};

如何正确传递TIn作为某种方法的形式参数?

class Test
{
public:
    template <typename T>
    static void test ( const TOut<T>::TIn &i) {} //Error
};


int main()
{
TOut <double> o;
Test::test(o.in);
}

程序编译时出现以下错误:

Error   4   error C2998: 'int test' : cannot be a template definition

2 个答案:

答案 0 :(得分:7)

您需要使用typename关键字:

template <typename T>
static void test ( const typename TOut<T>::TIn &i) {}

请参阅Where and why do I have to put the "template" and "typename" keywords?

答案 1 :(得分:2)

为什么你不能使用更简单的

template <typename T>
static void test (const T& i)

代替?