簡體   English   中英

C ++:用戶定義類型的向量?

[英]c++: vector of user-defined type?

我有一個要在其中存儲數據的向量。我希望用戶能夠確定存儲向量的精度級別(浮點數或雙精度數)。

如何根據用戶輸入聲明向量? 這顯然行不通:

std::vector<userWantsFloats ? float : double> data; ...

您不能基於僅在運行時知道的值來選擇用於類模板實例化的類型。

用於

std::vector<userWantsFloats ? float : double> data;

如果在編譯時知道userWantsFloats的值, userWantsFloats OK。 如果僅在運行時不知道userWantsFloats的值, userWantsFloats

您必須按照以下方式使用某些東西:

if ( userWantsFloats )
{
   std::vector<float> data;
   // Use data
}
else
{
   std::vector<double> data;
   // Use data
}

為了最大程度地重用其余代碼,它們必須是函數模板和/或類模板。

template <typename T>
void myAppLogic(std::vector<T>& data)
{
   // Do the work of your application
}

if ( userWantsFloats )
{
   std::vector<float> data;
   myAppLogic(data);
}
else
{
   std::vector<double> data;
   myAppLogic(data);
}

一個選項可能是使用std::variant

std::variant<std::vector<float>, std::vector<double>> data;

然后,您可以根據用戶輸入來初始化變量,但是只能使用std::visit編寫一次邏輯

std::visit([](auto&& vec) {
  // Do your thing
}, data);

如果不能選擇C ++ 17,則boost具有一個啟發了現在標准模板的變體模板。 您可以改用它。 請查閱有關該主題的增強文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM