Форум программистов, компьютерный форум CyberForum.ru

C++11::templates::compilation failure - C++

Восстановить пароль Регистрация
 
uniqueid
1 / 1 / 0
Регистрация: 04.01.2013
Сообщений: 10
22.02.2013, 22:00     C++11::templates::compilation failure #1
Почему не компилируется. Объяснить.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
template< unsigned v = 10 >
class a
{
public:
class b
{
std::vector< char > seq;
int n;
friend void std::swap<>( b &, b & );
};
};
namespace std
{
template<unsigned h>
void swap(
a<h>::b & lhs,
a<h>::b & rhs
)
{
std::swap( lhs.vec, rhs.vec );
std::swap( lhs.n, rhs.n );
}
}
 
int main()
{
a<>::b o1();
a<>::b o2();
std::swap(o1,o2);
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2013, 22:00     C++11::templates::compilation failure
Посмотрите здесь:

Говорят Compilation error C++
Compilation Error C++
Variadic Templates C++
templates, STL C++
C++ Variadic templates fail
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Герц
22.02.2013, 22:12
  #2

Не по теме:

потому что фигня какая-то написана ;-)

uniqueid
1 / 1 / 0
Регистрация: 04.01.2013
Сообщений: 10
22.02.2013, 22:20  [ТС]     C++11::templates::compilation failure #3
Цитата Сообщение от Герц Посмотреть сообщение

Не по теме:

потому что фигня какая-то написана ;-)

Включённые файлы и вместо vec seq ( добавить ).
Но как бы ты определил std::swap, работающий для любой a<>::b специализации?
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
22.02.2013, 22:42     C++11::templates::compilation failure #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
template <unsigned H = 10>
class Foo
{
public:
    class Bar
    {
    public:
        Bar(int n, std::vector<char>&& v): _n(n), _v(std::move(v))
        {
 
        }
 
        friend void swap(Bar&, Bar&);
        friend std::ostream& operator<< (std::ostream& stream, Bar& b)
        {
            stream << "N: " << b._n << std::endl;
            for(std::size_t i = 0; i < b._v.size(); ++i)
                stream << b._v.at(i) << ' ';
            return stream;
        }
 
    private:
        int                 _n;
        std::vector<char>   _v;
    };
};
 
namespace std
{
 
template <unsigned H>
void swap
(
    typename Foo<H>::Bar& b1,
    typename Foo<H>::Bar& b2
)
{
    std::swap(b1._v, b2._v);
    std::swap(b1._n, b2._n);
}
 
} // namespace std
 
int main()
{
    Foo<>::Bar b1(42, {'a'}), b2(24, {'b'});
    std::swap(b1, b2);
    std::cout << b1 << std::endl;
    std::cout << b2 << std::endl;
    return 0;
}
uniqueid
1 / 1 / 0
Регистрация: 04.01.2013
Сообщений: 10
23.02.2013, 00:03  [ТС]     C++11::templates::compilation failure #5
Цитата Сообщение от soon Посмотреть сообщение
C++
1
2
...
}
Только вызывается STL определённая функция при
C++
1
std::swap(b1, b2);
(VS2012).
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
23.02.2013, 01:27     C++11::templates::compilation failure #6
Гляньте тут: http://stackoverflow.com/questions/1...ot-be-inferred
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2013, 02:48     C++11::templates::compilation failure
Еще ссылки по теме:

Variadic templates C++
C++ Variadic templates
C++ Result_of + variadic templates

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
uniqueid
1 / 1 / 0
Регистрация: 04.01.2013
Сообщений: 10
23.02.2013, 02:48  [ТС]     C++11::templates::compilation failure #7
Цитата Сообщение от soon Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
// Вставить код, нах. выше
int main()
{
    Foo<>::Bar b1(42, std::vector<char>()), b2(24, std::vector<char>());
    std::swap<10U>(b1, b2);
    std::cout << b1 << std::endl;
    std::cout << b2 << std::endl;
    return 0;
}
В этом и дело - невыводимый контекст. При использовании кода выше одна из ошибок, "выплёвываемых" компилятором VS2012, - error C2248: 'Foo<>::Bar::_v' : cannot access private member declared in class 'Foo<>::Bar'. Сиречь, Bar "зафрэндил" иную специализацию.
Yandex
Объявления
23.02.2013, 02:48     C++11::templates::compilation failure
Ответ Создать тему
Опции темы

Текущее время: 04:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru