Re: maximum continuation lines in C++
On 27/05/2010 21:32, Jonathan Lee wrote:
On May 27, 4:20 pm, "Lynn McGuire"<l...@winsim.com> wrote:
Why would I do that ? std::vector objects are incrediby useful to pass around,
especially when one needs to know the size of the vector at runtime.
Because then you could do this:
#include<vector>
#include<string>
#include<iostream>
const char* spt[] = { // move to a header file and hide it
"Metal Raschig Super-Ring 0.3 mm",
"Metal Raschig Super-Ring 0.5 mm" };
int main() {
// no need for tupleString(up to 40 args)
size_t n = sizeof(spt)/sizeof(spt[0]);
std::vector< std::string> string_packing_types(spt, spt + n);
for (size_t i = 0; i< n; ++i)
std::cout<< string_packing_types[i]<< std::endl;
}
--Jonathan
At the risk of being summarily shot, here's one other way you *could* do
it but should probably never use:
#include <cstdarg>
#include <cstdio>
#include <string>
#include <vector>
template <typename T>
std::vector<T> make_vector(size_t count, ...)
{
std::vector<T> v;
va_list arg;
va_start(arg, count);
v.reserve(count);
for(size_t i=0; i<count; ++i)
{
v.push_back(va_arg(arg, T));
}
return v;
}
int main()
{
std::vector<int> iv = make_vector<int>(6,
23,
9,
7,
8,
17,
10
);
std::vector<std::string> sv = make_vector<std::string>(3,
std::string("Blah"),
std::string("Wibble"),
std::string("Foo")
);
return 0;
}
I hasten to add that this technique is about as safe as base jumping :)
But FWIW... Incidentally, if you replace make_vector with void
fill_vector(std::vector<T>& v, size_t count, ...), you can avoid
respecifying the vector's template parameter. YMMV.
Stu
P.S. For anyone who is genuinely wavering over using this, just say no -
the convenience of this technique just isn't worth the loss of type
safety involved.