我有一个课程,我想估计它消耗了多少内存:
success: function() {
$(".full-wrapper").html(data);
}
});
这很好用。最近我被要求支持success: function(data) {
^^^^ the returned data
$(".full-wrapper").html(data);
}
});
。
当前实现不起作用,因为template <typename T, typename U>
class MyTemplateClass
{
size_t EstimateMemoryConsumption() const
{
// the memory consumption is a function of the size of the first template argument
return f(sizeof(T));
}
}
不反映T == std::string
的内存消耗(我需要在sizeof(std::string)
上调用std::string
)。根据{{3}},我无法对成员函数进行部分专业化(适用于capacity()
和任何std::string
)
有没有不同的方法来实现这一目标?
答案 0 :(得分:2)
您可以将内存消耗作为模板参数本身的函数。
template <typename T, typename U>
class MyTemplateClass
{
size_t EstimateMemoryConsumption() const
{
return estimate<T>(my_data_member);
}
};
template <typename T>
size_t estimate(const T&) noexcept { return sizeof(T); }
template <>
size_t estimate<std::string>(const std::string& x) noexcept
{
return x.capacity();
}
答案 1 :(得分:1)
使用特征来实现专业化:
template <typename T>
class MyTemplateClassTraits
{
public:
static size_t EstimateMemoryConsumption(T& member)
{
return 0; // implement...
}
};
template <>
class MyTemplateClassTraits<std::string>
{
public:
static size_t EstimateMemoryConsumption(std::string& member)
{
return 0; // implement...
}
};
无需更改当前的API:
template <typename T, typename U>
class MyTemplateClass
{
//...
size_t EstimateMemoryConsumption() const
{
// the memory consumption is a function of the size of the first template argument
return MyTemplateClassTraits<T>::EstimateMemoryConsumption(t_data_member);
}
//...
}