相关疑难解决方法(0)

C++:模板类的嵌套类

请考虑以下代码:

template < typename T >
struct A
{
    struct B { };
};

template < typename T >
void f( typename A<T>::B ) { }

int main()
{
    A<int>::B x;
    f( x );         // fails for gcc-4.1.2
    f<int>( x );    // passes
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

所以这里gcc-4.1.2要求f明确指定模板参数.这符合标准吗?较新版本的GCC是否修复了此问题?如何避免int在调用时明确指定f

更新: 这是一个解决方法.

#include <boost/static_assert.hpp>
#include <boost/type_traits/is_same.hpp>

template < typename T >
struct A
{
    typedef T argument;
    struct B { typedef A outer; };
};

template < …
Run Code Online (Sandbox Code Playgroud)

c++ gcc templates nested-class gcc4

14
推荐指数
1
解决办法
1万
查看次数

如何显式实例化具有带友元函数的嵌套类的模板类(C++)

可能以前曾被问过,但所有这些都接近了我对C++的理解和认识的极限,所以我在理解被讨论的内容以及到底发生了什么方面有点慢.让我直接跳到代码.这有效:

template <typename T>
class Foo
{
    struct Bar
    {
        Bar() {}
        ~Bar() noexcept {}
        Bar(Bar&& b) : Bar() { swap(*this, b); }

        friend void swap(Bar& b1, Bar& b2) { /* ... */ }
    };
};

template class Foo<int>; // explicit instantiation of Foo with int type
Run Code Online (Sandbox Code Playgroud)

但是如何移动结构体swap外部的定义Bar呢?如果我这样做:

template <typename T>
class Foo {
    struct Bar {
        // ...
        Bar(Bar&& b) : Bar() { swap(*this, b); } // line 16
        // ...
        template <typename V>
          friend …
Run Code Online (Sandbox Code Playgroud)

c++ templates

10
推荐指数
1
解决办法
1860
查看次数

标签 统计

c++ ×2

templates ×2

gcc ×1

gcc4 ×1

nested-class ×1