LINUX.ORG.RU

Сообщения Kasha

 

С++ , шаблоны, помощь и поддержка

Форум — Development

Господа,

Сижу, пишу на С++, никого не трогаю, однако же возникает чувство незнания языка, недопонимания возможностей, правил либо присутствие ограничений

К делу. https://gist.github.com/teyrnon/872c8f0cf07f6659992e - бессмысленная попытка посмотреть на compile-time вычисления на шаблонах, реализовать подобие fmap

tp<unsigned N, unsigned D>
struct frac_t {
    enum {
        n = N,
        d = D,
    };
};

tp<unsigned A> struct mult {
    tp<unsigned B> struct apply {
        enum { value = A * B, };
    };
};

tp< class Func, class Frac> struct fmap {

    tp<unsigned V>
    using apply_test = typename Func::apply<V>;

    using value = frac_t<
         Func::apply< Frac::n >::value,
         Func::apply< Frac::d >::value >;
};

std::cout << fmap< mult<2u>, frac_t<1u,2u> >::value();

Как поправить данную конструкцию?

*UPD* лог компилятора

g++ -c -pipe -std=c++11 -g -Wall -W -fPIE  -I../Monads -I. -I../../Qt/5.4/gcc_64/mkspecs/linux-g++ -o main.o ../Monads/main.cpp
../Monads/main.cpp:32:44: error: expected ';' before '<' token
     using apply_test = typename Func::apply<V>;
                                            ^
../Monads/main.cpp:32:44: error: expected unqualified-id before '<' token
../Monads/main.cpp:35:31: error: wrong number of template arguments (1, should be 2)
          Func::apply< Frac::n >::value,
                               ^
../Monads/main.cpp:7:8: error: provided for 'template<unsigned int N, unsigned int D> struct frac_t'
 struct frac_t {
        ^
../Monads/main.cpp: In instantiation of 'struct fmap<mult<2u>, frac_t<1u, 2u> >':
../Monads/main.cpp:44:49:   required from here
../Monads/main.cpp:32:44: error: 'typename mult<2u>::apply' names 'template<unsigned int B> struct mult<2u>::apply', which is not a type
     using apply_test = typename Func::apply<V>;
                                            ^
../Monads/main.cpp: In function 'int main(int, const char**)':
../Monads/main.cpp:44:18: error: 'value' is not a member of 'fmap<mult<2u>, frac_t<1u, 2u> >'
     std::cout << fmap< mult<2u>, frac_t<1u,2u> >::value();
                  ^
make: *** [main.o] Error 1

 ,

Kasha
()

RSS подписка на новые темы