メンバ変数の型を、そのクラスのコンストラクタに渡される引数の型から推測しようとしています。クラスのコンストラクター(PublishSubscribeクラス)は、2つのパラメーターを受け取ります。それぞれのパラメーターは、可変型(送信用に1つ、受信用に1つ)です。コンストラクタに渡される引数の型から変数のメンバ型を控除する
私が働いて取得しようとしているコードは以下の通りです:
#include <tuple>
template <typename... Types>
struct TopicTypes {};
TopicTypes<int> type_subscribe_topics;
TopicTypes<int,double> type_publish_topics;
template <typename... TReceives>
class PublishSubscribe
{
public:
template < typename... TReceives, template <typename...> class TR,
typename... TSends, template <typename...> class TS>
PublishSubscribe(const TR<TReceives...>&,
const TS<TSends...>&){}
private:
std::tuple<TReceives...> member_;
};
class UserClass : public PublishSubscribe{
public:
UserClass()
: PublishSubscribe(
type_subscribe_topics,
type_publish_topics
){}
};
int main()
{
return 0;
}
私は、次のコンパイルエラーを取得しています:
variadic3.cpp:13:17: error: declaration of 'class ... TReceives'
template < typename... TReceives, template <typename...> class TR,
^
variadic3.cpp:9:11: error: shadows template parm 'class ... TReceives'
template <typename ... TReceives>
どのようにして型をPublishSubscribeクラスをテンプレートうtype_subscribe_topicsの私はPublishSubscribe<magic(decltype(type_subscribe_topics))>
を必要とし、この場合はデフォルトでPublishSubscribe<int>
になります。
多くのことに感謝します!
右になる
と
member_
のようにそれを使用することができます!私はmember_変数がコンストラクタに渡されるパラメータの型と同じ型を持つようにしたいので、同じ型を使用しています。 –@MihaiGalosああ、私はあなたがそれをすることができるかどうかはわかりません。 AFAIKメンバ変数は、メンバ関数のテンプレートパラメータに依存できません。これは、クラスのコンパイル時には分かりません。 – NathanOliver
ハム。そうですか。 type_subscribe_topics *と* PublishSubscribeの両方をテンプレート化するための「汎用」テンプレートを作成するには、ここで何ができますか? –