[英]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);
}
一個c ++ 17選項可能是使用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.