看了cpunion寫的IDL的代碼,我知道了這樣的用法:
在模板參數中,類型參數可以這樣構造:
??????? template_class< type( type1, type2, ... ) > a_class;
比如,可以void( void ), void(), void( int ), 也可以int( void ), string( int )等等,編譯器是將它們當作不同的類型的來處理的.對此,我寫了一些代碼作了一下測試(見文末).但我也僅僅是有一個感性的認識而已,對于其為什么可以這樣(因為從未見哪本書上介紹過這樣的用法),我一點也不知道.
希望大家幫我釋疑,也希望cpunion來幫我一下,謝謝!

#include?<iostream>

typedef?void(*fun)(int);

using?namespace?std;

template<?typename?T?>
struct?Base


{
????void?test()

????
{
????????cout?<<?"Base "?<<?"\t=\t";
????????cout?<<?"Base<"?<<?typeid(T).name()?<<?">"?<<?endl;
????}
};

template<>
struct?Base?<?void?>


{
????void?test()

????
{
????????cout?<<?"Base "?<<?endl;
????}
};

template<>
struct?Base?<?void(?int?)?>


{
????void?test()

????
{
????????cout?<<?"Base "?<<?endl;
????}
};

template<>
struct?Base?<?fun?>


{
????void?test()

????
{
????????cout?<<?"Base "?<<?endl;
????}
};

template<>
struct?Base?<?int(?string,?int,?char?)?>


{
????void?test()

????
{
????????cout?<<?"Base "?<<?endl;
????}
};

int?main(int?argc,?char*?argv[])


{
????Base<?void?>?b_void;
????Base<?void(?int?)?>?b_void_int;
????b_void.test();
????b_void_int.test();

????Base<?int(?string,?int,?char?)?>?b_int;
????Base<?fun?>?b_fun;
????b_int.test();
????b_fun.test();


????Base<?Base<?void?>?(?Base?<?int?(?string,?int,?char?)?>?)?>?b_complex;
????b_complex.test();

????return?0;
}

在模板參數中,類型參數可以這樣構造:
??????? template_class< type( type1, type2, ... ) > a_class;
比如,可以void( void ), void(), void( int ), 也可以int( void ), string( int )等等,編譯器是將它們當作不同的類型的來處理的.對此,我寫了一些代碼作了一下測試(見文末).但我也僅僅是有一個感性的認識而已,對于其為什么可以這樣(因為從未見哪本書上介紹過這樣的用法),我一點也不知道.
希望大家幫我釋疑,也希望cpunion來幫我一下,謝謝!






























































































