C++ dreams
От: c-smile Канада http://terrainformatica.com
Дата: 27.10.04 18:57
Оценка:
Навеяно веткой про boost в "Прикладных вопросах" и попыткой
творчески осмыслить конструкцию из примера boost
( http://www.boost.org/libs/mpl/doc/#metafunctions )

template< typename T >
struct can_be_on_stack
    : mpl::bool_c< (sizeof(T) <= sizeof(double)) >
{
};

// use 'if_' to choose where to store 'T' member
template< typename T >
struct lightweight
   : private mpl::if_<
          can_be_on_stack<T>
        , stack_holder<T>
        , heap_holder<T>
        >::type
{
   // ...
};


На мой взгляд такие "syntax mixin" еще хуже чем старые добрые #define

В качестве альернативы я бы предложил ввести в язык нечто типа
типизированных meta функций, например приведенный пример можно записать так:

meta 
  bool can_be_on_stack(typename T) {
        return (sizeof(T) <= sizeof(double)); 
  }
meta
  typename optimal_holder(typename T) 
   { return can_be_on_stack(T)? tack_holder<T>:heap_holder<T>; }

template< typename T > 
   struct lightweight : private optimal_holder<T>
   {
   };


Я не уверен в синтасической полноте / гармоничности такого рода конструкций
поэтому давайте помечтаем вместе: "как оно должно быть на самом деле?"
Как дополнить синтаксис template<> что бы получить meta if, meta switch и т.д.

Ваши предложения?




27.10.04 23:51: Перенесено модератором из 'C/C++. Прикладные вопросы' — Павел Кузнецов
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.