Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как специализировать тип enum для шаблона?
|
|||
|---|---|---|---|
|
#18+
Мне нужно, чтобы в классе A, вызывались operator& которые не выводят "3". Ну то есть как написать перегруженный оператор который бы работал для всех enum. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2013, 13:57 |
|
||
|
Как специализировать тип enum для шаблона?
|
|||
|---|---|---|---|
|
#18+
manking, Начните с того что уберите obj.metod(); из шаблона. Из-за него шаблон содержит ошибку (т.к. в enum нет никаких методов) и исключается из поиска среди доступных перегруженных операторов. (По стандарту С++, никаких ошибок не должно быть в этом случае - читайте про SFINAE) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2013, 14:35 |
|
||
|
Как специализировать тип enum для шаблона?
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskymanking, Начните с того что уберите obj.metod(); из шаблона. Из-за него шаблон содержит ошибку (т.к. в enum нет никаких методов) и исключается из поиска среди доступных перегруженных операторов. (По стандарту С++, никаких ошибок не должно быть в этом случае - читайте про SFINAE) Мне нужно что бы этот перегруженный оператор не вызывался. Он для объектов(или для объектов можно указать особый?). То есть указать такой operator& который бы вызывался для любых enum. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2013, 14:55 |
|
||
|
Как специализировать тип enum для шаблона?
|
|||
|---|---|---|---|
|
#18+
manking, Я не понял. Он что вызывается что-ли? Прямо вот так - с вызовом obj.metod() для enum? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2013, 15:06 |
|
||
|
Как специализировать тип enum для шаблона?
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskymanking, Я не понял. Он что вызывается что-ли? Прямо вот так - с вызовом obj.metod() для enum? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2013, 15:09 |
|
||
|
Как специализировать тип enum для шаблона?
|
|||
|---|---|---|---|
|
#18+
manking, Не надо пытаться объяснить что вы хотите на придуманном языке: Код: plaintext 1. - это не С++ Объясните по-русски, что вы получаете и что хотите получить. Если приводите код, то это должен быть именно тот код который вы компилируете, а не набранный по памяти или придуманный на лету в редакторе форума. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2013, 15:17 |
|
||
|
Как специализировать тип enum для шаблона?
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, Я думаю что сделать шаблон который ловит все возможные enum нельзя (хотя наверно как-то можно извратиться с boost::is_enum). Но вы можете сделать шаблон, который ловит конкретные enum. Код: plaintext 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.06.2013, 15:30 |
|
||
|
Как специализировать тип enum для шаблона?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyAnatoly Moskovsky, Я думаю что сделать шаблон который ловит все возможные enum нельзя (хотя наверно как-то можно извратиться с boost::is_enum). Но вы можете сделать шаблон, который ловит конкретные enum. Я сейчас нашел, что так можно сделать с помощью Код: plaintext 1. это из С++11. там целая система для работы с шаблонами Код: plaintext 1. Где нибудь можно про это подробно почитать? Потому что возможности вроде бы огромные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2013, 17:04 |
|
||
|
Как специализировать тип enum для шаблона?
|
|||
|---|---|---|---|
|
#18+
manking, class enum ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2013, 00:18 |
|
||
|
Как специализировать тип enum для шаблона?
|
|||
|---|---|---|---|
|
#18+
Я понял, ему нужна частичная специализация шаблона функции-члена operator & (двуместный) для определённых enum. На самом деле для enum можно определить только для всех, поскольку это один тип данных -- int. Для class enum из Cx11 можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2013, 00:26 |
|
||
|
Как специализировать тип enum для шаблона?
|
|||
|---|---|---|---|
|
#18+
MasterZiv, На самом деле, как видно из первого примера, у него перегрузки int не матчатся с enum, даже не смотря на то, что по правилам С++ сначала ищутся нешаблонные перегрузки, а уже потом шаблоны. Это происходит потому, что enum это не int, а отдельный тип, который просто неявно приводится к int, наподобие как указатели неявно приводятся к bool. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2013, 01:11 |
|
||
|
Как специализировать тип enum для шаблона?
|
|||
|---|---|---|---|
|
#18+
mankingAnatoly MoskovskyAnatoly Moskovsky, Я думаю что сделать шаблон который ловит все возможные enum нельзя (хотя наверно как-то можно извратиться с boost::is_enum). Но вы можете сделать шаблон, который ловит конкретные enum. Я сейчас нашел, что так можно сделать с помощью Код: plaintext 1. это из С++11. там целая система для работы с шаблонами Код: plaintext 1. Где нибудь можно про это подробно почитать? Потому что возможности вроде бы огромные. В C++11 остался только std::enable_if http://www.cplusplus.com/reference/type_traits/enable_if/ В boost их было много всяких http://www.solarix.ru/for_developers/cpp/boost/utility/ru/enable_if.shtml Ну и про SFINAE в интернетах посмотрите http://en.wikipedia.org/wiki/Substitution_failure_is_not_an_error А возможности действительно большие! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2013, 01:50 |
|
||
|
Как специализировать тип enum для шаблона?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyMasterZiv, На самом деле, как видно из первого примера, у него перегрузки int не матчатся с enum, даже не смотря на то, что по правилам С++ сначала ищутся нешаблонные перегрузки, а уже потом шаблоны. Это происходит потому, что enum это не int, а отдельный тип, который просто неявно приводится к int, наподобие как указатели неявно приводятся к bool. По стандарту enum -- int, чтобы это обойти, в Cx11 и вводили class enum. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2013, 02:27 |
|
||
|
Как специализировать тип enum для шаблона?
|
|||
|---|---|---|---|
|
#18+
MasterZivAnatoly MoskovskyMasterZiv, На самом деле, как видно из первого примера, у него перегрузки int не матчатся с enum, даже не смотря на то, что по правилам С++ сначала ищутся нешаблонные перегрузки, а уже потом шаблоны. Это происходит потому, что enum это не int, а отдельный тип, который просто неявно приводится к int, наподобие как указатели неявно приводятся к bool. По стандарту enum -- int, чтобы это обойти, в Cx11 и вводили class enum. Не похоже: http://ideone.com/MllyRY авторis same enum A and int: false is_enum: int: false enum A: true class B: false enum class C: true decltype(C::alpha): true Разница в том, что enum сам приводиться к int, а enum class обязательно надо приводить через static_cast. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2013, 03:04 |
|
||
|
Как специализировать тип enum для шаблона?
|
|||
|---|---|---|---|
|
#18+
MasterZivПо стандарту enum -- int Ну присвойте какой-нибудь int в enum. Посмотрим, насколько это соответствует действительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2013, 20:05 |
|
||
|
Как специализировать тип enum для шаблона?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyMasterZivПо стандарту enum -- int Ну присвойте какой-нибудь int в enum. Посмотрим, насколько это соответствует действительности. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2013, 01:13 |
|
||
|
Как специализировать тип enum для шаблона?
|
|||
|---|---|---|---|
|
#18+
LepsikAnatoly Moskovskyпропущено... Ну присвойте какой-нибудь int в enum. Посмотрим, насколько это соответствует действительности. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Это называется static_cast. А без него: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. авторprog.cpp:13:12: error: invalid conversion from ‘ int ’ to ‘ main()::teste ’ [-fpermissive] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2013, 01:30 |
|
||
|
Как специализировать тип enum для шаблона?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2013, 13:26 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=73&tid=2020027]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
| others: | 13ms |
| total: | 147ms |

| 0 / 0 |
