したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |

管理人の独り言(プログラミング関連)

252 ◆rCEzuNnL0g:2008/09/06(土) 23:35:07
出来たー
但しVec<>()のテンプレートの第二引数に1以下の値を渡すとコンパイラが暴走するよ。
----
#include <iostream>
#include <cstdarg>

template<typename t>
struct Pointer{
template<size_t i>
struct _{
typedef typename Pointer<t>::_<i - 1>::type *type;
};

template<>
struct _<0>{
typedef typename t type;
};
};

template<typename t>
struct _Vec{
template<size_t i>
static
typename Pointer<t>::_<i>::type fnc(va_list arg){
typename Pointer<t>::_<i>::type p;
size_t size = va_arg(arg, size_t);
p = new typename Pointer<t>::_<i - 1>::type[size];
for(size_t j = 0; j < size; ++j){
p[j] = fnc<i - 1>(arg);
}
return p;
}

template<>
static
typename Pointer<t>::_<1>::type fnc<1>(va_list arg){
size_t size = va_arg(arg, size_t);
return new typename Pointer<t>::_<0>::type[size];
}
};

template<typename t, size_t i>
typename Pointer<t>::_<i>::type Vec(size_t size, ...){
va_list arg;
va_start(arg, size);
typename Pointer<t>::_<i>::type p;
p = new typename Pointer<t>::_<i - 1>::type[size];
for(size_t j = 0; j < size; ++j){
p[j] = _Vec<t>::fnc<i - 1>(arg);
}
va_end(arg);

return p;
}

int main(){
Pointer<char>::_<10>::type p = Vec<char, 10>(2, 2, 2, 2, 2, 2, 2, 2, 2, 2);
}


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板