gpt4 book ai didi

lhs 上的 C++ 模板和函数

转载 作者:行者123 更新时间:2023-11-28 00:09:24 25 4
gpt4 key购买 nike

给出以下类:

template< class T> class table2D
{
...
public:
bool copy(int r, int c, int rows , int cols, table2D & s ) ;
};

其中,方法 copy() 将 block 或元素从 s 复制到 this

我如何编写上述代码(使用模板???)以便我可以使用如下方法:

table2D  s, d ;
d.copy(0, 0, 3, 3) = s ;

最佳答案

我不同意 tadman 的评论,所以我粗略地编写了代码(可能有一些错误,但我认为这些概念是正确的)。

我确信有更优雅和更通用的方法来对此进行编码。但我认为这种事情正是 C++ 旨在发挥作用的方式。

创建占位符对象以保留函数的输入是一种非常标准的 C++ 技术,该函数的真正工作需要稍后完成。

template< class T> class copier4i
{
copier4i(T& t, int a, int b, int c, int d) : m_t(t), m_a(a), m_b(b), m_c(c), m_d(d) {}
bool operator=(T& s) { return m_t.copy(m_a,m_b,m_c,m_d,s); }
T& m_t;
int m_a, m_b, m_c, m_d;
};

...
template< class T> class table2D
{
...
public:
bool copy(int r, int c, int rows , int cols, table2D & s ) ;
copier4i<table2D> copy(int r, int c, int rows , int cols) {
return copier4i<table2D>(*this,r,c,rows,cols); }
};

我没有测试这个的好地方,所以我不确定额外的 <table2D>我刚刚在上面添加的是正确的解决方案(根据我的预期推断)或者问题是否是(我从未完全清楚的)名称 table2D在其自己的定义中使用,什么时候隐式表示 table2D<T> (正如我在这里打算的那样)vs. 什么时候需要明确(如果在 table2D 的定义之外使用它会是这样。所以也许应该是:

   auto  copy(int r, int c, int rows , int cols) {
return copier4i(*this,r,c,rows,cols); }

或者也许

   copier4i<table2D<T> >  copy(int r, int c, int rows , int cols) {
return copier4i<table2D<T> >(*this,r,c,rows,cols); }

新版本,包括来自 bool 的更改至 void George T. 制作的,这次在 ideone 进行了测试(作为 C++14 代码)

#include <stdio.h>
#include <stdlib.h>


template< class T > class copier4i
{
public:
T& m_t;
int m_a, m_b, m_c, m_d;

copier4i(T& t, int a, int b, int c, int d) : m_t(t), m_a(a), m_b(b), m_c(c), m_d(d) {}
copier4i& operator=(T& s) { m_t.copy(m_a,m_b,m_c,m_d,s); return *this;}

} ;

template< class T> class table2D
{
public:
int m_rows ;
int m_cols ;
T * m_obj ;
public:
table2D( int r, int c ) {
m_rows = r ;
m_cols = c ;
m_obj = ( T * )malloc( m_rows * m_cols * sizeof( T ) ) ;
}
~table2D() {
free( m_obj );
}
inline T * operator[](int r) {
return (this->m_obj + (r * m_cols ) ) ;
}
void copy( int r, int c, int cr, int cc, table2D &s) {
(*this)[r][c] = s[0][0] ;
}

copier4i< table2D > copy(int r, int c, int rows , int cols)
{
return copier4i<table2D>( *this, r, c, rows, cols );
}
} ;


int main()
{

table2D<int> t(5, 5);
table2D<int> s(5, 5);

s.copy(0, 0, 2, 2, t );

s.copy(0, 0, 2, 2) = t ;
}

关于lhs 上的 C++ 模板和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33883390/

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