可以用作数据类型的变量。 < >在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