gpt4 book ai didi

C++ 模板 : How to conditionally compile different code based on data type?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:13:13 25 4
gpt4 key购买 nike

这里有一个小例子来说明我的问题的本质:

#include <iostream>
using namespace std ;
typedef char achar_t ;

template < class T > class STRING
{
public:
T * memory ;
int size ;
int capacity ;
public:
STRING() {
size = 0 ;
capacity = 128 ;
memory = ( T *) malloc( capacity * sizeof(T) ) ;
}
const STRING& operator=( T * buf) {
if ( typeid(T) == typeid(char) )
strcpy( memory, buf ) ;
else
wcscpy( memory, buf ) ;
return *this ;
}
} ;

void main()
{
STRING<achar_t> a ;
STRING<wchar_t> w ;
a = "a_test" ;
w = L"w_test" ;
cout << " a = " << a.memory << endl ;
cout << " w = " << w.memory << endl ;
}

有人可以帮我编译上面的内容吗?这是根据我正在使用的对象的类型以某种方式使用 strcpy() 或 wcscpy() 进行编译。

谢谢

最佳答案

使用 std::char_traits<CharT> .

你可以替换strcpy()wcscpy()通过组合静态方法 std::char_traits::length() std::char_traits::copy() .这也将使您的代码更通用,因为 std::char_traits专攻 char16_tchar32_t .

 STRING& operator=( T const * buf) {
// TODO: Make sure that buffer size for 'memory' is large enough.
// You propably also want to assign the 'size' member.

auto len = std::char_traits< T >::length( buf );
std::char_traits< T >::copy( memory, buf, len );

return *this ;
}

旁注:

  • 我更改了参数类型 bufT const*因为将字符串文字分配给指向非常量数据的指针是不合法的。我们只需要对 buf 指向的数据进行读取访问.
  • 我将返回类型更改为 STRING&因为这就是 assignment operator 的方式通常是声明的。该方法必须是非常量的,因此没有必要将返回类型限制为常量引用。

关于C++ 模板 : How to conditionally compile different code based on data type?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44371651/

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