2010-11-25 7 views
0

。どうしたらいいですか?同じ宣言二つの異なるタイプ

+0

さまざまなタイプを使用できますか?または、私はここで何かを逃していますか? –

+0

'typedef X type_0;'を意味しますか? – kennytm

+0

@Mike and Kenny no guys、私は、このクラステンプレート(X)を何らかの形で宣言して、同じparamを持つ各インスタンスが新しい型を作成することを望みます。 –

答えて

1

あなたは序タグを使用できます。また

template <typename T, int Tag> class X { ... }; 

typedef X<int, 0> type_0; 
typedef X<int, 1> type_1; 

を、あなたが相続使用できます。

class type_0 : X<int> { ... }; 
class type_1 : X<int> { ... }; 

をしかし、これは、このような混合しながら、コンストラクタのパラメータと危険を転送する必要性など、いくつかの困難に苦しんでいます代入セマンティクスと継承。

+0

ありがとう、lijieへの私の答えを参照してください –

+0

@There ...:その後、継承ソリューションがあなたの唯一の選択肢かもしれません。 –

1

別のもの(たとえば、整数?)でパラメータ化する必要があります。たとえば、Xtemplate <typename T, int N> struct X {...};と定義し、X<int,0> type_0; X<int,1> type_1を使用します。テンプレートパラメータが一致する場合、それらは同じタイプです。

+0

それは私が違いをもってしたいことのようなものです。この2番目のパラメータをコンパイラで計算したいので、手動で入力する必要はありません。 –

+0

すべての変数を別の型とみなしたいのですか?名前でタイプを参照することは決してありませんか? – lijie

+0

私はあなたが言ったように、すべての変数が異なるタイプとみなされたいと思っています。 –

1

このように、Xテンプレートクラスから継承するクラスを作成します。彼らは同じライン上にない場合

template <int I> 
class type_i : public X<int> 
    { 
    }; 

typedef type_i<0> type_0; 
typedef type_i<1> type_1; 
+0

あなたの答え+1ありがとう、はいそれは実行可能な音。私は今それを試し、後で私はそれが私のために、そして私が作り出したものがどのようになったのかを皆に知らせます。 –

7
template < typename T, int I > class X; 

X<int, __LINE__ > x0; 
X<int, __LINE__ > x1; 

X0とX1は、このような意志、他のすべての宣言など、さまざまなタイプになりますファイル内にあります。

+0

ha lol :) +1 –

+0

これはかなり賢いです:D –

+0

@CashCowそれは解決策になりますが、__LINE__とは何ですか?ありがとうございました。 –

関連する問題