글
웹 서핑 중 C++11의 기능 중 Visual Studio 2013에도 추가된 'Non-static data member initializers, Variadic templates, Initializer lists, Alias templates' 기능을 맛 볼 수 있는 코드를 보아서 소개한다.
테스트는 간단하게 웹 컴파일러를 이용했다.
웹 컴파일러: http://melpon.org/wandbox/
코드(출처: http://d.hatena.ne.jp/osyo-manga/20131027/1382882447 )
#include <iostream>
#include <vector>
#include <string>
// Variadic templates
template<typename... Args>
void func(Args... args)
{
// Initializer lists
for(auto&& n : { args... })
{
std::cout << n << std::endl;
}
}
template<typename T>
struct X
{
T value;
X(int n) : value(n){}
};
struct person
{
// Non-static data member initializers
int age = 13;
std::string name = "homu";
};
// Aliases templates
template<typename T>
using my_vector = std::vector<X<T>>;
int main()
{
std::cout << "Aliases templates, Initializer lists" << std::endl;
my_vector<int> v = { X<int>{1}, X<int>{2}, X<int>{3}};
for(auto&& n : v)
{
std::cout << n.value << std::endl;
}
std::cout << std::endl;
std::cout << "Variadic templates" << std::endl;
func(1.1, 2.2, 3.3, 4.4, 5.5);
std::cout << std::endl;
std::cout << "Non-static data member initializers" << std::endl;
person homu;
std::cout << homu.name << std::endl;
std::cout << homu.age << std::endl;
return 0;
}
< 결과 >
위 코드는 Visual Studio 2013에서도 잘 돌아가며 VS 2013에서는 C++11 기능 중 아래의 것이 새롭게 구현 되었다.
Non-static data member initializers
Variadic templates
Initializer lists
Default template arguments for function templates
Alias templates
Delegating constructors
Explicit conversion operators
Raw string literals
Defaulted and deleted functions
더 자세한 정보는 http://msdn.microsoft.com/en-us/library/vstudio/hh567368.aspx 를 참고.
댓글