我在調用具有兩個模板參數的模板函數時遇到問題。具有兩個模板參數的調用函數
我有一個類,該類接受兩種不同類型的對象。我還不知道類型,所以我將它們作爲模板參數。然後我將這些對象存儲在包裝類中。最後,我希望能夠使用兩個模板參數來調用模板函數,這需要我的兩個對象。但我對如何做到這一點感到困惑。
這是一個精簡版的代碼來解釋我的問題。
template<typename A, typename B>
void someTemplateFunction(A a, B b);
class Problem
{
private:
class WrapperA
{
public:
virtual void doSomething() = 0;
};
template<typename A>
class ConcreteWrapperA : public wrapperA
{
private:
A a;
public:
ConcreteWrapperB(A b_) : a(a_) {}
virtual void doSomething();
};
class WrapperB
{
public:
virtual void doSomething() = 0;
};
template<typename B>
class ConcreteWrapperB : public wrapperB
{
private:
B b;
public:
ConcreteWrapperB(B b_) : b(b_) {}
virtual void doSomething();
};
WrapperA *a;
WrapperB *b;
public:
template<typename A>
void setA(A a)
{
a = new ConcreteWrapperA<A>(a);
}
template<typename B>
void setB(B b)
{
a = new ConcreteWrapperB<B>(b);
}
void call_someTemplateFunction(); // ??????? How do i do this?
};
是否每個「A」或「B」類型都已知?我的意思是,例如,你知道'B'可以是'int,long或short',只不過是。如果是,那麼我可以提供答案。另一方面,如果你可以同時設置一個功能,那麼當然使用第一個答案。 – PiotrNycz
不幸的是,「A」和「B」的類型不知道。我雖然關於與訪客一起使用'boost :: variant'。但這似乎並不奏效。 –
boost :: variant需要在使用boost :: variant之前已知所有可能的類型。這正是我之前問過的。對不起,問兩次相同的問題,也許我以前的Q不清楚:你知道所有可用於調用'Problem :: setA'或'Problem :: setB'的類型嗎? – PiotrNycz