흥미있는 주제들이 오가곤 합니다.
그 중의 한 내용이 "How to initialize a constant class array"였는데,
저도 이전서부터 흥미를 가지고 있던 내용이라 참여하게 됐네요.
간단하게 VS 2010에서 아래와 같은 구문이 가능할까 입니다.
· Foo() : myArray {1, 2, 3, 4} {} // constructor
· array<int, 4> = {1, 2, 3, 4};
결론적으로 말하면 후자만 됩니다.
전자는 Initialize lists라는 C++0x의 표준입니다.
C++0x 도 요새 나오는 웹브라우저와 비슷해서 지원되는 내역이 따로 있더군요.
아쉽게도 아직 지원하지 않는다고 합니다.
근데, 밑은 그것이 가능한데 그 이유는 tr1을 지원하기 때문이랍니다.
std::tr1::array<> 클래스를 쓸 때 저런 초기화를 이제 지원한다는 건데,
VS 2010엔 가능하고, VS 2008에서도 서비스 팩을 깔면 가능하다고 하는군요.
const array를 생성하는 예제는 다음과 같습니다.
#include <array>
void main()
{
array<int, 4> const a = {1, 2, 3, 4};
int b = a[1];
a[2] = 3; // error C3892: 'a' : you cannot assign to a variable that is const
}
단지 안타까운 건 여전히 Member Variable로 const array를 선언할 수는 없다는 점입니다.
개인적으로 이런 식의 시도를 해봤습니다만..
struct Foo
{
auto at;
Foo(int x) { at = [&](int i) -> int
{ static int tempArray[] = {1, x, x+x, x*x}; return tempArray[i]; }
};
안 돌아가더군요 흑흑.
Initialize lists가 지원되기를 기다리는 수밖에..
그러고보니 VS 2010에서 지원되는 tr1 라이브러리가 뭐뭐인지 정리된 곳 있나요?
아래는 VS 2010에서 지원되는 기능들입니다.
VC9 |
VC10 |
|
No |
v2 |
|
No |
v2 |
|
No |
No |
|
Yes |
Yes |
|
No |
Yes |
|
No |
Yes |
|
No |
Yes |
|
No |
Yes |
|
No |
Yes |
|
No |
v1.0 |
|
No |
Yes |
|
Yes |
Yes |
|
Yes |
Yes |
|
No |
Yes |
|
Partial |
Partial |
|
No |
No |
|
Partial |
Partial |
|
Yes |
Yes |
|
C++0x Core Language Features: Concurrency |
||
No |
Yes |
|
Partial |
Partial |
|
C++0x Core Language Features: C99 |
||
Partial |
Partial |
|
Partial |
Partial |
|
Yes |
Yes |
'프로그래밍 > C++' 카테고리의 다른 글
메시지 처리기 (0) | 2009.10.08 |
---|---|
My C++ Tips (4) | 2009.02.18 |
STL에 대한 단상 (4) | 2008.01.29 |
C++ 기본 문제 By Choo (6) | 2007.07.26 |
임시변수의 범위는 어디까지일까요 (2) | 2007.07.13 |