有没有可能从函数中得到sizeof
Is it possible to get sizeof from a function?
我这样调用一个函数:
void do_work(void* ptr, size_t size)
{
//do things with ptr and size
}
问题是:是否有可能调用像do_work(one);
这样的函数,并以某种方式获得函数内部的sizeof ?
给定one
是一个静态数组 (int one[10];
)或非数组 (int one;
),这是可能的吗?
在c++中,您可以使用模板参数推导来获得指针的类型(指向类型),然后计算其sizeof:
template<typename T>
void do_work( T* ptr )
{
constexpr std::size_t size = sizeof(T);
}
可以使用函数模板:
template <typename T>
void do_work(T* stuff)
{
const size_t s = sizeof(T);
....
}
Edit: version for arrays:
template<typename T, size_t N >
void do_work(T (&array)[N] )
{
const size_t s = N * sizeof(T);
}
不,对于void *
,您将无法计算传递地址的对象的大小。
template <typename T>
void do_work(T * t) { do_work(t, sizeof(T)); }
template<typename T>
void do_work(T* ptr)
{
size_t size = sizeof(T);
size = sizeof(*ptr); // or this
}
我不懂c++,这个问题出现在我面前,可能是因为它之前有C标签。但这是你可以在C中做的,可能也可以在c++中做:
#define do_work(_a_) do_work_func(_a_, sizeof(_a_))
void do_work_func( void* ptr, size_t size )
{
//do things with ptr and size
}
如果do_work( one );
调用中的one
被定义为数组,则
如果我说对了,你可能会想:
#include <iostream>
void do_work(void* ptr, size_t size)
{
std::cout << "Size: " << size << 'n';
}
template <typename T>
void do_work(T& single) {
do_work(&single, 1);
}
template <typename T, std::size_t N>
void do_work(T (&array)[N]) {
do_work(array, N);
}
template <typename T>
void do_work(T* multiple, std::size_t n) {
do_work(static_cast<void*>(multiple), n);
}
int main()
{
int a = 1;
int b[] = { 1, 2, 3 };
int* c = b;
do_work(a);
do_work(b);
do_work(c, 3);
}
相关文章:
- 为什么 sizeof(ar)/ sizeof(ar[0]) 在传递给函数时无法在向量上正常工作?
- sizeof 函数如何在带和不带位字段的结构上工作?(填充)
- 如何将数组传递给使用 sizeof 的函数?
- 为什么sizeof函数在这里不能正常工作
- sizeof(函数)有意义吗?
- sizeof() 运算符在 C++ 中的函数
- 为什么在 sizeof() 函数中与 * 运算符一起使用和不使用 * 运算符时,指向结构变量的指针大小会有所不同?
- 有人可以告诉我为什么我在这里使用sizeof()函数无法找到数组的长度
- 内联函数,等于 "sizeof expression" ,但返回一个有符号值
- 字符串数组上的C sizeof将传递给函数时未返回预期结果
- 在可变参数模板中使用 sizeof 运算符跳过递归结束的函数
- 如果 T 是一个函数,则不要对 T 使用 sizeof
- 在结构的构造函数中使用sizeof
- 为什么对于某些数组A,sizeof(A)在函数内部不起作用
- 字符常量和函数名称的 sizeof() 背后的逻辑
- 为什么 sizeof 运算符无法在函数模板中工作
- 为什么函数上的typeid是可以的,而sizeof则不是
- sizeof函数在函数中不起作用
- 有人能向我解释一下为什么sizeof函数在下面的代码中返回不同的值
- 正确使用sizeof()函数