可以用作数据类型的变量。 < >在C++中,我可以通过将数据类型存储在某个特定变量中的(int,char,sd::string等)程序中,然后使用该变量代替常规数据类型(例如:声明其他变量)?p>
例如:可以用作数据类型的变量。 < >在C++中,我可以通过将数据类型存储在某个特定变量中的(int,char,sd::string等)程序中,然后使用该变量代替常规数据类型(例如:声明其他变量)?p>,c++,c++11,c++14,C++,C++11,C++14,例如: T = some-function("int") now std::vector < T > is equivalent to std::vector <int> ? T=某个函数(“int”) 现在std::vector等同于std::vector? 您可以使用模板和decltype 基于您的代码片段的一个最简单的工作示例: #include<vector> template<typename T> T some_function(
T = some-function("int")
now std::vector < T > is equivalent to std::vector <int> ?
T=某个函数(“int”)
现在std::vector等同于std::vector?
您可以使用模板和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;
}
#包括
模板
T某个函数(){return{};}
int main(){
//t有int型
自动t=某个函数();
//vec现在具有std::vector类型
std::vec;
}
您可以使用模板和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;
}
#包括
模板
T某个函数(){return{};}
int main(){
//t有int型
自动t=某个函数();
//vec现在具有std::vector类型
std::vec;
}
您可以使用关键字使用为类型别名(给它们另一个名称):
using vi = std:: vector<int>; // I recommend against such short names
// ...
vi some_vector_with_integers;
使用vi=std::vector;//我建议不要用这么短的名字
// ...
vi一些带_u整数的向量u;
当然,这完全是在编译时发生的
将此类声明包装在模板中可以进行编译编程:
template<int N>
using X = std::conditional<(N > 42), int, double>:: type;
模板
使用X=std::conditional 42)int,double>::type;
您可以使用关键字使用为类型别名(给它们另一个名称):
using vi = std:: vector<int>; // I recommend against such short names
// ...
vi some_vector_with_integers;
使用vi=std::vector;//我建议不要用这么短的名字
// ...
vi一些带有整数的向量;
当然,这完全是在编译时发生的
将此类声明包装在模板中可以进行编译编程:
template<int N>
using X = std::conditional<(N > 42), int, double>:: type;
模板
使用X=std::conditional 42)int,double>::type;
C++是一种静态类型语言,这意味着运行时中几乎不存在类型。函数返回类型完全由参数类型(const char*
)定义,不能依赖于参数值(“int”
)
计算流可能受到类型的影响,例如通过过载-但反之亦然。因此,您无法通过调用某个函数来“计算”类型
相反,您可以使用templates/decltype
/auto
在编译时生成复杂的上下文相关类型,或者使用多态类型
多态类型确实有运行时定义的行为:您可以让您的某些函数返回一个抽象工厂,然后使用该工厂来生成您的对象——它们的具体类型在编译时是未知的。当然,您仍然需要使用一些静态类型来实例化向量
——通常是指向泛型类(AbstractType*
)的指针
您提到的int
、char
和std::string
提示您可能不需要整个多态层次结构,可以使用静态类型进行管理
是一些模板,用于确定调用函数的结果类型。请注意,函数甚至没有被调用——同样,返回类型只取决于参数类型,而不是一些计算。C++是一种静态类型语言,这意味着运行时中几乎不存在类型。函数返回类型完全由参数类型(const char*
)定义,不能依赖于参数值(“int”
)
计算流可能受到类型的影响,例如通过过载-但反之亦然。因此,您无法通过调用某个函数来“计算”类型
相反,您可以使用templates/decltype
/auto
在编译时生成复杂的上下文相关类型,或者使用多态类型
多态类型确实有运行时定义的行为:您可以让您的某些函数返回一个抽象工厂,然后使用该工厂来生成您的对象——它们的具体类型在编译时是未知的。当然,您仍然需要使用一些静态类型来实例化向量
——通常是指向泛型类(AbstractType*
)的指针
您提到的int
、char
和std::string
提示您可能不需要整个多态层次结构,可以使用静态类型进行管理
是一些模板,用于确定调用函数的结果类型。请注意,函数甚至不被调用——返回类型只依赖于参数类型,而不是某些计算。在运行时这样做需要C++所没有的。一旦源文件被编译成most类型,信息就消失了。在编译时使用模板,任何模板都会有帮助。如果您希望在编译时不知道的泛型类型,请使用<代码> STD::Opjix在运行时执行此操作,而C++不具备此功能。一旦源文件被编译成most类型,信息就消失了。在编译时使用模板,任何模板都会有帮助。如果需要编译时未知的泛型类型,请使用std::variant