gpt4 book ai didi

c++ - 模板相当于宏中的#var

转载 作者:搜寻专家 更新时间:2023-10-31 01:00:03 25 4
gpt4 key购买 nike

在 C++ 宏中,您可以使用 #var 获取传递的参数的文字字符串:

#define PRINT_SIZE(type)                                                       \
(std::cout << sizeof(type) << " " << #type << std::endl)

使用这个宏,我可以编写一个非常简单的程序,它将在我的机器上给出特定类型的长度:

PRINT_SIZE(bool);
PRINT_SIZE(char);

这确实有效,但我想改用 C++ 模板。使用以下模板函数很容易获得大小:

template <typename T>
void print_size() {
std::cout << sizeof(T) << std::endl;
}

我可以用任何类型调用这个函数,它会输出大小:

print_size<bool>();
print_size<char>();

有什么方法可以让我从任何地方得到一个文字 "bool" ,这样输出就和带有宏的输出一样好吗?

最佳答案

它可以通过 RTTI(运行时类型推断)使用 typeid 来完成:

#include <iostream>
#include <typeinfo>

template <typename T>
void print_size() {
T a;
std::cout << typeid(a).name() << ": " << sizeof(T) << std::endl;
}

int main(){

print_size<bool>();
print_size<char>();
print_size<long>();

return 0;
}

这个输出:

b: 1
c: 1
l: 8

关于c++ - 模板相当于宏中的#var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32037209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com