Open maraigue opened 5 years ago
前回わからなかったメタ関数を調べる
できた https://wandbox.org/permlink/2vBaWzTFpH9CrrWt
#include<iostream>
#include<type_traits>
template<template<class> class A,
template<class> class B,
class T, class V>
constexpr bool check(A<T>, B<V>) {
return std::is_same<A<T>, B<T>>::value;
}
template<class T> struct holder1 { };
template<class T> struct holder2 { };
int main() {
std::cout << "holder1<int> . holder1<char> = "
<< check(holder1<int>(), holder1<char>()) << std::endl;
std::cout << "holder1<int> . holder2<int> = "
<< check(holder1<int>(), holder2<int>()) << std::endl;
}
実装しないとならない関数が多すぎるが順次実装している
holder1のコンストラクタがprivateだと通らなかったのでupdate
#include<iostream>
#include<type_traits>
template<template<class...> class A,
template<class...> class B,
class... T,class... V>
constexpr auto is_same_holder_impl(A<T...>, B<V...>) noexcept {
return std::is_same<A<T...>, B<T...>>();
}
template<class A, class B>
struct is_same_holder
: decltype(is_same_holder_impl(std::declval<A>(), std::declval<B>()))
{ };
template<class... T> class holder1 {
holder1(){}
};
template<class... T> struct holder2 { };
int main() {
static_assert( is_same_holder<holder1<int,int>, holder1<char>>::value);
static_assert(!is_same_holder<holder2<int,int>, holder1<char>>::value);
}
引き続き、「要素取得も挿入・削除も対数時間でできるリスト構造」を実装する。 イテレータ自体の実装を完成させるとともに、リスト構造のメソッドでイテレータを使う箇所を実装する。 とりあえず、イテレータを使っての要素挿入・削除は実装したい(サンプルコードを書きやすくなるので)