2017-06-06 57 views
0

有沒有一種形式的異構容器,能夠存儲例如不同的原始類型(如int,float,double)?用於POD的C++異構容器?

最終我想能夠使用在計算中的元素沒有提及明確的類型,例如auto res = a + b,其中操作數ab是元素拉出容器,並可以相同或不同類型的。

+3

您正在尋找弱類型的編程語言。爲什麼你需要在C++中做到這一點?那麼,也許考慮升壓的變種或任何。 –

+0

C++是一種靜態類型語言。這意味着每個對象的類型都是在編譯時指定的,而不是運行時指定的。 C++從根本上不像你描述的那樣工作。 –

+1

@CodyGray:相當*「動態類型」*,它仍然可以*「強類型」*。只是不*「靜態類型」*。 – IInspectable

回答

3

使用C++ 17,您可以使用std::any與任何容器。使用較舊的C++版本,您可以使用boost::any

#include <iostream> 
#include <vector> 
#include <any> 

struct A 
{ 
    int a; 
    explicit operator int() const { return a; } 
}; 

struct B 
{ 
    double b; 
    explicit operator double() const { return b; } 
}; 

int main() 
{ 
    A a{ 5 }; 
    B b{ 6.}; 

    std::vector<std::any> v; 
    v.push_back(3); 
    v.push_back(4.); 
    v.push_back(a); 
    v.push_back(b); 

    for (auto const e : v) 
    { 
     if (e.type() == typeid(double)) 
      std::cout << std::any_cast<double>(e) << std::endl; 

     if (e.type() == typeid(B)) 
      std::cout << (double)std::any_cast<B>(e) << std::endl; 
    } 
} 
+0

很好的例子,感謝@Lior Kogan! – valiano