龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

Another way to handle array initialization

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
PROBLEM: bwh@kato.prl.ufl.edu (Brian Hook) [...] I STILL haven't gotten a good technical reason why parameters to constrUCtors for arrays haven't been at least talked out (I'm not a committee member, so I don't know if this has been shot do

  PROBLEM: bwh@kato.prl.ufl.edu (Brian Hook)

  

  

[...]

  

  

I STILL haven't gotten a good technical reason why

  

parameters to constrUCtors for arrays haven't been at least talked out (I'm

  

not a committee member, so I don't know if this has been shot down

  

informally, so if it has, forgive my lack of knowledge on this).

  

  

I even asked The Man himself, and his response was basically that he didn't

  

see much need for it. I know I run into instances on occasion where I want

  

to specify something that is constant over an entire array of objects. For

  

example, something even as simple as "name".

  

  

Object array1[100]("Member of array1");

  

Object array2[100]("Member of array2");

  

  

I suppose templates serve much the same purpose, but it just seems so

  

damned inconsistent to not have parameters to constructors for arrays!

  

  

Sure, there's the old trick:

  

  

Object::name = "Member of array1";

  

Object array[100];

  

Object::name = "Member of array2";

  

etc. etc.

  

  

Now if THAT ain't ugly, I don't know what is!

  

  

  

RESPONSE: kanze@us-es.sel.de (James Kanze), 6 Jul 94

  

  

The trick I use is slightly different:

  

  

template< double r , double i >

  

class ComplexWithInit : public Complex

  

{

  

public :

  

ComplexWithInit()

  

: Complex( r , i ) {}

  

} ;

  

  

Complex* c1 = new ComplexWithInit< 1.0 , 2.0 >[ 10 ] ;

  

Complex* c2 = new ComplexWithInit< 3.0 , 4.0 >[ 20 ] ;

  

  

Formally speaking, this is *not* guaranteed to work. Practically, I

  

would be interested in hearing about a plausible implementation where

  

it will not actually work. (Finding the correct standardese which

  

would permit guaranteeing this to work without causing problems

  

elsewhere is a non-trivial problem, however.)

  

精彩图集

赞助商链接