0
我試圖從傳遞給它的類構造函數的參數類型中推導出一個成員變量的類型。該類的構造函數(PublishSubscribe類)接收兩個參數,每個參數表示可變類型(一個用於發送的可變參數包,一個用於接收)。從傳遞給構造函數的參數類型推導可變參數成員類型
我試圖獲取工作的代碼如下:
#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_變量具有與傳遞給構造函數的參數類型相同的類型。 –
@MihaiGalos哦,我不確定你能做到這一點。 AFAIK成員變量不能依賴於成員函數模板參數,因爲在編譯類時這是不知道的。 – NathanOliver
Humm。我懂了。在這裏可以做些什麼來爲模板type_subscribe_topics *和* PublishSubscribe創建一個「通用」模板? –