模板类 char*,函数 const char* 的返回类型?
Posted
技术标签:
【中文标题】模板类 char*,函数 const char* 的返回类型?【英文标题】:Template class char*, return type of function const char*? 【发布时间】:2022-01-16 18:45:20 【问题描述】:我有这个模板化的基类:
template <class V>
class ValueParam
public:
virtual V convert(const char* f) const = 0;
protected:
V val;
;
请注意,我可以存储一些类型为 V
的值 val
,并且我有一个 convert
函数,当我在 ValueParam
对象上调用它时,它会自动返回正确的类型。
int
类型为 V
的示例:
class IntParam : public ValueParam<int>
public:
IntParam(int i) val = i;
int convert(const char* f) const override return atoi(f);
;
然后我们可以使用:
IntParam i(1234); // The value of val is 1234
int x = i.convert("1"); // x will be 1
现在我在使用char*
作为我的类型V
时遇到了一个问题:
class StrParam : public ValueParam<char*>
public:
StrParam(const char* str, size_t max_len)
val = new char[max_len + 1];
strncpy(val, str, max_len + 1);
~StrParam() delete[] val;
char* convert(const char* f) const override return f; // Doesn't compile: f is const char*
;
我不想做任何 const 转换。
幸运的是,我不需要convert
的结果以任何方式可变。我可以将它的返回类型更改为可以编译的东西吗?
那会是什么类型?因为仅仅将其更改为virtual const V convert...
将意味着StrParam
中的返回类型将变为char* const convert...
,这显然仍然不起作用。
【问题讨论】:
【参考方案1】:您可以在返回类型的指向类型上添加const
:
// for non-pointer type
template <typename T>
struct add_const_pointee using type = T; ;
// for pointer type
template <typename T>
struct add_const_pointee<T*> using type = const T*; ;
// helper type
template <typename T>
using add_const_pointee_t = typename add_const_pointee<T>::type;
template <class V>
class ValueParam
public:
virtual add_const_pointee_t<V> convert(const char* f) const = 0;
// ^^^^^^^^^^^^^^^^^^^^^^
protected:
V val;
;
和
class StrParam : public ValueParam<char*>
public:
StrParam(const char* str, size_t max_len)
val = new char[max_len + 1];
strncpy(val, str, max_len + 1);
~StrParam() delete[] val;
const char* convert(const char* f) const override return f;
// ^^^^^
;
【讨论】:
以上是关于模板类 char*,函数 const char* 的返回类型?的主要内容,如果未能解决你的问题,请参考以下文章
字符串类中的字符串(const char *)构造函数内存泄漏
从string 转换为const char *和char * (附带string中c_strdatacopy(p,n)函数的用法)
从string 转换为const char *和char * (附带string中c_strdatacopy(p,n)函数的用法)
C++ 我将一个const char*的字符串转换为string出错
已知strcpy的函数原型:char *strcpy(char *strDest, const char *strSrc),编写函数 strcpy