LINUX.ORG.RU

c++ , constexpr


0

0

enum Type{Type1,Type2};

template<enum Type>
struct Foo
{
};

const Type gettype()
{
return Type1;
}

const Type t = gettype();
Foo<t> foo; // конечно не прокатывает

В новом стандарте обещают "constexpr" , а как сейчас побороть компилятор ?

★★★

Re: c++ , constexpr

Вроде, никак. Только макросами.

const86 ★★★★★ ()

Re: c++ , constexpr

>как сейчас побороть компилятор ?

в качестве константы времени компиляции можно использовать результат выполнения sizeof. делаешь специализации шаблонов функций для данных значений (enum это int, т.е. проблем быть не должно) с различным размером возвращаемого значения. если непонятно, могу написать и код

jtootf ★★★★★ ()

Re: c++ , constexpr

enum Type{Type1,Type2};

template<enum Type>
struct Foo
{
};


struct gettype
{
  const static Type value = Type1;
};

const Type t = gettype::value;

Foo<t> foo;

Begemoth ★★★★★ ()
Ответ на: Re: c++ , constexpr от jtootf

Re: c++ , constexpr

>если непонятно, могу написать и код

в общих чертах пожалуйста :-)

kitov ★★★ ()
Ответ на: Re: c++ , constexpr от Begemoth

Re: c++ , constexpr

>struct gettype
>{
> const static Type value = Type1;
>};

Мне именно возвращаемое значение функции

kitov ★★★ ()
Ответ на: Re: c++ , constexpr от kitov

Re: c++ , constexpr

>в общих чертах пожалуйста :-)

подумал и понял, что не помню как я это делал. вот, в любом случае, моя дискуссия на c.l.c++ в процессе решения подобной задачи:

http://groups.google.com/group/comp.lang.c++/browse_thread/thread/13826307733...

а код до завтра постараюсь всё же наваять

jtootf ★★★★★ ()
Ответ на: Re: c++ , constexpr от kitov

Re: c++ , constexpr

Это к тому, что шаблон - это функция времени компиляции, а нешаблонный тип - нульарная функция. Наверно, я неправильно понял.

Begemoth ★★★★★ ()
Ответ на: Re: c++ , constexpr от jtootf

Re: c++ , constexpr

Видимо без макросов не разобраться ...

kitov ★★★ ()
Ответ на: Re: c++ , constexpr от kitov

Re: c++ , constexpr

>Видимо без макросов не разобраться ...

да. я таки использовал boost.typeof, а для компиляторов без встроенного typeof он реализован именно через макросы. другого варианта получить тип возвращаемого значения для шаблона функции, специализации которой по этому значению отличаются, я не нашёл

jtootf ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.