2013-05-05 50 views
0

我希望有人可以提供一些有关特定问题的见解。我正在编写一个程序,它采用整数,将它们存储在一个向量中,并用逗号分隔符将它们打印出来,数字大于999 - > 1,000。重载<<并定义一个流操作器C++

我的问题是..好吧,其实两个,我怎样才能传递一个矢量到一个函数,第二,如果我想超载的所有这些在幕后将是可能的吗?

从类逗号

全局函数:

template <class T> 
string formatWithComma(T value){ 
    stringstream ss; 
    locale commaLoc(locale(), new CommaNumPunc()); 
    ss.imbue(commaLoc); 
    ss << value; 
    return ss.str(); 

环在main()显示矢量:

for (vector<unsigned int>::iterator i = integers.begin(); i != integers.end(); ++i){ 
    cout << formatWithComma(*i) << " "; 
} 
+0

你不需要编写自定义'locale'有逗号分隔的数字,' num_punct'应该用','作为分隔符,'3'作为数字分组 – 2013-05-05 23:28:21

回答

1

第一个问题:

如何传递载体的功能

只需直接通过。例如(假定函数模板):

template <typename T> 
void processVector(const vector<T>& vec); 

内部主,您可以按以下称之为:

processVector<unsigned int> (integers); //an example instantiation 

第二个问题:

,如果我想超载< <到在幕后做这一切会是可能的吗?

是的,当然可以。看看如何从这些资源超负荷<<操作: MSDN Overload << operatorOverload the << operator WISC

和SO一堆资源:How to properly overload << operator

2

传递一个矢量到一个函数可以这样来完成:

void foo(std::vector<T> &vector); 
void foo(const std::vector<T> &vector); 

您通常需要传递(const)引用以避免复制向量。