Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;模板部分专门化用于对每个参数进行sizeof或动态大小计算_C++_Templates_Metaprogramming - Fatal编程技术网

C++ C++;模板部分专门化用于对每个参数进行sizeof或动态大小计算

C++ C++;模板部分专门化用于对每个参数进行sizeof或动态大小计算,c++,templates,metaprogramming,C++,Templates,Metaprogramming,我希望能够得到每个参数的大小 class MyClass(int a, char b, std::string c) { ... } auto x = CreateInstanceAndCalculateSize<MyClass>(1, 'c', std::string("somthing")); 类MyClass(int a、char b、std::string c) { ... } auto x=CreateInstanceAndCalculateSize(1,'c',s

我希望能够得到每个参数的大小

class MyClass(int a, char b, std::string c)
{
  ...
}

auto x = CreateInstanceAndCalculateSize<MyClass>(1, 'c', std::string("somthing"));
类MyClass(int a、char b、std::string c) { ... } auto x=CreateInstanceAndCalculateSize(1,'c',std::string(“somthing”);
std::unique\u ptr CreateInstanceAndCalculateSize(类型和参数)
{
size\u t size=sizeof(Arg)或Arg.length();//我认为这需要对遇到的每种可能的Arg类型进行部分专门化
返回std::unique_ptr(新的T(std::forward(Args)…);
}

您可能正在寻找以下内容:

template <typename T>
size_t MySizeOf(const T& t) { return sizeof(T); }

template <>
size_t MySizeOf<std::string>(const std::string& s) { return s.size(); }

template <typename... Types>
size_t CalculateSize(Types&& ... Args)
{
  return ... + MySizeOf(Args);
}
模板
size_t MySizeOf(const t&t){return sizeof(t);}
模板
size_t MySizeOf(const std::string&s){return s.size();}
模板
大小\u t计算大小(类型和参数)
{
返回…+MySizeOf(Args);
}

是否要查找参数包中的元素数?这将是
sizeof…(Args)
您实际使用
size
做什么?不,我想计算每个参数的大小。我将使用它进行日志记录,然后根据大小决定如何/在何处分配它的算法。我要找的不是…的尺寸。我正在为基元类型寻找sizeof,但随后为我的数据类型做一些事情这将为您提供一个按顺序排列的C样式数组。还是它们必须是编译时常量?我需要部分专门化。。。这意味着对于int->4。。。double->8,mydatatype->callSomeFunctionForDeterminingSize(instanceOfMyDataType)
template <typename T>
size_t MySizeOf(const T& t) { return sizeof(T); }

template <>
size_t MySizeOf<std::string>(const std::string& s) { return s.size(); }

template <typename... Types>
size_t CalculateSize(Types&& ... Args)
{
  return ... + MySizeOf(Args);
}