在C ++中是否有任何方法可以将数据类型存储在程序中,如(int,char,std :: string等)在某种特定类型的变量中,然后使用该变量代替常规数据类型(例如:声明其他变量)?
例如: -
T = some-function("int")
now std::vector < T > is equivalent to std::vector <int> ?
答案 0 :(得分:4)
您可以使用模板和decltype
基于您的代码段的最小的工作示例:
#include<vector>
template<typename T>
T some_function() { return {}; }
int main() {
// t has type int
auto t = some_function<int>();
// vec has type std::vector<int> now
std::vector<decltype(t)> vec;
}
答案 1 :(得分:0)
您可以使用using
关键字对其进行别名(为其命名):
using vi = std:: vector<int>; // I recommend against such short names
// ...
vi some_vector_with_integers;
当然,这纯粹是在编译时发生的。
在模板中包含此类声明允许编译编程:
template<int N>
using X = std::conditional<(N > 42), int, double>:: type;
答案 2 :(得分:0)
C ++是一种静态类型语言,这意味着运行时中几乎不存在类型。函数返回类型完全由参数类型(const char*
)定义,不能依赖于参数值("int"
)。
计算流程可能会受到类型的影响,例如:通过过载 - 但反之亦然。因此,您无法通过调用某个函数来“计算”类型。
相反,您可以使用模板/ decltype
/ auto
在编译时生成复杂和依赖于上下文的类型,或使用多态类型。
多态类型确实具有运行时定义的行为:您可以使some-function
返回抽象工厂,然后使用该工厂生成对象 - 它们的具体类型在编译时是未知的。当然,您仍然需要使用某种静态类型实例化vector
- 通常是指向泛型类(AbstractType*
)的指针。
您提到int
,char
和std::string
这一事实暗示您可能不需要整个多态层次结构,并且可以使用静态类型进行管理。
Here是一些模板,用于确定调用函数的结果类型。请注意,甚至没有调用该函数 - 再次,返回类型仅取决于参数类型,而不是某些计算。