声明一个 c++ 向量,它可以包含命名空间中定义的所有数据类型
declare a c++ vector that can contain all data types defined in a namespace
我有一个名为“dtypes.h”的文件,其中包含一些数字数据类型的定义。
namespace dtypes {
typedef signed short int int16;
// ... some other dtypes
}
我还有另一个文件,我想在其中创建一个可以包含所有这些数据类型(和其他向量)的向量。我想到了这样的事情:
#include <vector>
#include "dtypes.h"
std::vector<std::variant<\* ??? *\>> content;
我真的不知道该放什么而不是“???”,而不必列出所有不同的数据类型(不做 std::vector<std::variant<dtypes::int16, dtypes::int32 \*...*\>> content;
)
我找到了一些示例 here,但这并不是我想要的。
您不一定需要在那里列出正确的清单,但您需要在某处列出清单。无法避免显式编写列表。
就像链接问题中的一个答案所建议的那样,您可以使用 std::any
的向量来存储 any 类型的 objects。明显的缺点是失去了变体类型的特征。
关于typedef signed short int int16;
,建议看标准<cstdint>
header。它包含固定宽度整数的别名。无需重复该工作(除非您需要支持 pre-C++11 并且不能使用开源库)。
您可以使用 std::vector
存储所有项目,方法是将 std::any
作为模板参数提交给 std::variant
。它看起来像这样,
std::vector<std::variant<std::any>> arr;
arr.push_back("Hello World");
arr.push_back(10);
arr.push_back(10.0f);
arr.push_back(10.0);
auto any = std::get<std::any>(arr[0]);
auto pTypeName = any.type().name(); // You can get the name of the type to match and cast if your not sure about the index.
std::string str = std::any_cast<const char*>(any);
如果必须使用 std::variant
,现在您可以使用它。如果不是,您可以使用 std::any
的 std::vector
作为其他答案所述。
我有一个名为“dtypes.h”的文件,其中包含一些数字数据类型的定义。
namespace dtypes {
typedef signed short int int16;
// ... some other dtypes
}
我还有另一个文件,我想在其中创建一个可以包含所有这些数据类型(和其他向量)的向量。我想到了这样的事情:
#include <vector>
#include "dtypes.h"
std::vector<std::variant<\* ??? *\>> content;
我真的不知道该放什么而不是“???”,而不必列出所有不同的数据类型(不做 std::vector<std::variant<dtypes::int16, dtypes::int32 \*...*\>> content;
)
我找到了一些示例 here,但这并不是我想要的。
您不一定需要在那里列出正确的清单,但您需要在某处列出清单。无法避免显式编写列表。
就像链接问题中的一个答案所建议的那样,您可以使用 std::any
的向量来存储 any 类型的 objects。明显的缺点是失去了变体类型的特征。
关于typedef signed short int int16;
,建议看标准<cstdint>
header。它包含固定宽度整数的别名。无需重复该工作(除非您需要支持 pre-C++11 并且不能使用开源库)。
您可以使用 std::vector
存储所有项目,方法是将 std::any
作为模板参数提交给 std::variant
。它看起来像这样,
std::vector<std::variant<std::any>> arr;
arr.push_back("Hello World");
arr.push_back(10);
arr.push_back(10.0f);
arr.push_back(10.0);
auto any = std::get<std::any>(arr[0]);
auto pTypeName = any.type().name(); // You can get the name of the type to match and cast if your not sure about the index.
std::string str = std::any_cast<const char*>(any);
如果必须使用 std::variant
,现在您可以使用它。如果不是,您可以使用 std::any
的 std::vector
作为其他答案所述。