2016-05-21 2 views
0

Я новичок в BOOST_AUTO, и вот основной вопрос.BOOST_AUTO И C++ Пользовательский тип

Я определил свой собственный класс и использовал его с BOOST_AUTO. Согласно учебнику:

Если вашему определить свой собственный тип, то TYPEOF библиотека не может справиться с этим , если вы позволите ему знать об этом типе. Вы указываете библиотеке Typeof о типе (или шаблоне) при помощи «регистрации» этого типа/шаблона.

Но мой код ниже ничего не фиксирует и корректно работает в VC++ 2010. Эта регистрация действительно необходима. Я сделал что-то неправильно?

#include <boost/typeof/typeof.hpp> 
using namespace std; 
namespace NS1 { 
    struct X { 
     X(const X& x){s=x.s+1;} 
     X(){s=3;} 
     int s; 
    }; 
} 
int _tmain(int argc, _TCHAR* argv[]) 
{ 
    NS1::X x; 
    BOOST_AUTO(y,x); 

    cout << y.s << endl; 
    return 0; 
} 

выход: 4

+0

Возможно, ваш компилятор поддерживает регулярные 'auto'. – chris

+0

о да да! https://msdn.microsoft.com/en-us/library/dd293615(v=vs.100).aspx. Означает ли это BOOST_AUTO автоматически #define для 'auto' в VC++ 2010? – JavaMan

+1

@JavaMan: Это не имеет значения, просто используйте регулярные 'auto'. –

ответ

0

из docs:

BOOST_AUTO макрос эмулирует предложенный авто ключевое слово в C++.

, глядя в код, кажется, они заменяют BOOST_AUTO на BOOST_TYPEOF.

typeof, похоже, является старым расширением имени decltype в компиляторах GCC. (см. this SO question). Код библиотеки boost typeof не использует автоматически ключевое слово auto для msvc (см. here).

Похоже, что на момент написания этой библиотеки были некоторые компиляторы, которые поддерживали ключевое слово auto, а другие - нет. Если вы хотите скомпилировать код на архитектурах, которые не поддерживают эту функцию, необходима регистрация.

В любом случае, поскольку C++ 11 выпущен на некоторое время. Используя эту библиотеку, если вы уже поддерживаете компилятор, ключевое слово auto должно считаться плохой практикой, потому что эта библиотека существует только для эмуляции предлагаемой функции.

За исключением, конечно, вы должны скомпилировать C++ 03 по какой-либо причине.

Смежные вопросы