簡體   English   中英

使用C ++中的附加模板參數擴展模板化結構

[英]Extend templated struct with additional template parameter in C++

template< typename T >
struct A {

};

template< typename T, typename U >
struct A : A<T> {

};


int main() {
    A<double> ad;
    A<int, int> a;
}

編譯錯誤

 g++ -std=c++17 -Wall -pedantic -pthread main.cpp && ./a.out main.cpp:9:8: error: redeclared with 2 template parameters struct A : A<T> { ^ main.cpp:4:8: note: previous declaration 'template<class T> struct A' used 1 template parameter struct A { ^ main.cpp: In function 'int main()': main.cpp:16:5: error: expected initializer before 'A' A<int, int> aii; ^ 

不同的模板名稱工作正常:

template< typename T >
struct A {

};

template< typename T, typename U >
struct AA : A<T> {

};


int main() {
    AA<int, int> aa;
}

想擁有相同的模板名稱。 它應該可以使用可變參數模板,但我不知道如何。
感謝您的關注

如果可以定義默認值,則可以使用默認參數:

template<typename T, typename U = /* default */>
struct A {

};

如果要使用不同的行為處理不同數量的模板參數,還可以使用可變參數模板和專門化:

template<typename...>
struct A;

template<typename T>
struct A<T> { // specialization for one parameter

};

template<typename T, typename U>
struct A<T, U> { // specialization for two parameter

};

int main() {
    A<double> ad;
    A<int, int> a;
    // A<int, int, int> a; // error, undefined
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM