我試圖寫template class defining a super type idiom的變化繼承定義的類型。類Inherit介紹類型Super來表示可能是很長的超類型,並且還需要知道派生類型New做這我不會在這裏呈現出一些額外的東西。 這工作正常,如果傳遞給New類型是不是一個模板,但沒有使用模板。這裏是clang++-3.8 -std=c++1y -Wall編譯一個完整的例子(GCC給出了
所以我們可以說我有很多的模板參數類,其中之一是派生類使用CRTP: template <typename Derived, typename A, typename B, typename C, typename D>
class BaseFoo {
public:
BaseFoo(A& a) {}
};
而且我想繼承它: class DerivedFoo : public B
請考慮下面的代碼片段: template<class E>
class vector_expression
{
public:
auto size() const {
return static_cast<E const&>(*this).size();
}
auto operator[](/* type equal to E::size_type
template <class T>
class Base {
static_assert(!std::is_default_constructible<T>::value,
"T must not be default constructible");
};
struct X1 : Base<X1> {};
struct X2 : Base<X2> {