Object initialization in C++
I am looking at someone's code, I don't understand how the object getting initialized here:
template <typename String>
void test_numbers()
{
SampleClass<String> compare;
String lhs = "abc";
String rhs = "efg";
check_equality(compare(lhs, rhs), true);
}
The object compare is created of class type SampleClass and then assigned 2 strings when passed on as a parameter. How this initialization works? Any comments? suggestions?
c++ class templates object
add a comment |
I am looking at someone's code, I don't understand how the object getting initialized here:
template <typename String>
void test_numbers()
{
SampleClass<String> compare;
String lhs = "abc";
String rhs = "efg";
check_equality(compare(lhs, rhs), true);
}
The object compare is created of class type SampleClass and then assigned 2 strings when passed on as a parameter. How this initialization works? Any comments? suggestions?
c++ class templates object
Which initialization?
– kennytm
Feb 23 '12 at 19:32
4
That depends on the definition ofSampleClass
which you haven't shown. I suspect it is a function object which is poorly named or this is not the actual code you are looking at.
– AJG85
Feb 23 '12 at 19:33
add a comment |
I am looking at someone's code, I don't understand how the object getting initialized here:
template <typename String>
void test_numbers()
{
SampleClass<String> compare;
String lhs = "abc";
String rhs = "efg";
check_equality(compare(lhs, rhs), true);
}
The object compare is created of class type SampleClass and then assigned 2 strings when passed on as a parameter. How this initialization works? Any comments? suggestions?
c++ class templates object
I am looking at someone's code, I don't understand how the object getting initialized here:
template <typename String>
void test_numbers()
{
SampleClass<String> compare;
String lhs = "abc";
String rhs = "efg";
check_equality(compare(lhs, rhs), true);
}
The object compare is created of class type SampleClass and then assigned 2 strings when passed on as a parameter. How this initialization works? Any comments? suggestions?
c++ class templates object
c++ class templates object
edited Nov 21 at 2:40
Cœur
17.4k9102143
17.4k9102143
asked Feb 23 '12 at 19:29
RAB
409
409
Which initialization?
– kennytm
Feb 23 '12 at 19:32
4
That depends on the definition ofSampleClass
which you haven't shown. I suspect it is a function object which is poorly named or this is not the actual code you are looking at.
– AJG85
Feb 23 '12 at 19:33
add a comment |
Which initialization?
– kennytm
Feb 23 '12 at 19:32
4
That depends on the definition ofSampleClass
which you haven't shown. I suspect it is a function object which is poorly named or this is not the actual code you are looking at.
– AJG85
Feb 23 '12 at 19:33
Which initialization?
– kennytm
Feb 23 '12 at 19:32
Which initialization?
– kennytm
Feb 23 '12 at 19:32
4
4
That depends on the definition of
SampleClass
which you haven't shown. I suspect it is a function object which is poorly named or this is not the actual code you are looking at.– AJG85
Feb 23 '12 at 19:33
That depends on the definition of
SampleClass
which you haven't shown. I suspect it is a function object which is poorly named or this is not the actual code you are looking at.– AJG85
Feb 23 '12 at 19:33
add a comment |
2 Answers
2
active
oldest
votes
//I am initialised with my default constructor (no args)
SampleClass<String> compare;
//I am initialised with my `const char*` constructor (and assignment operator)
String lhs = "abc";
String rhs = "efg";
//Compare (already initialised) is being invoked by it's `operator()`
check_equality(compare(lhs, rhs), true);
compare is already constructed. It has an operator()
implemented that allows it to appear as a function, accepting arguments.
you can make your own easily.
struct op_test{
int i;
op_test(int i_) : i(i_){}
int operator()(int j)const { return j*i; }
};
:::
op_test ot(5);
ot(6); //5*6
The reason this is useful is because we can do thing like this.
std::vector<int> a(700); //700 ints
std::transform(a.begin(), a.end(), b.begin(), op_test(5));
//or
std::transform(a.begin(), a.end(), b.begin(), &my_func); //calls a function
std::transform(a.begin(), a.end(), b.begin(), (int i){ return i*5; }); //lambda
see here:
http://msdn.microsoft.com/en-us/library/5tk49fh2(v=vs.80).aspx
useful with
http://en.cppreference.com/w/cpp/algorithm
"//Compare (already initialised) is being invoked by it'soperator()
" Can you please elaborate on this? thanks!
– RAB
Feb 23 '12 at 19:34
thank you very much, it solved my headache :)
– RAB
Feb 23 '12 at 19:39
I am glad I could be of service.
– 111111
Feb 23 '12 at 19:40
add a comment |
It simply creates an automatic variable of type SampleClass<String>
. Then its operator()
is called with two String
arguments.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f9419853%2fobject-initialization-in-c%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
//I am initialised with my default constructor (no args)
SampleClass<String> compare;
//I am initialised with my `const char*` constructor (and assignment operator)
String lhs = "abc";
String rhs = "efg";
//Compare (already initialised) is being invoked by it's `operator()`
check_equality(compare(lhs, rhs), true);
compare is already constructed. It has an operator()
implemented that allows it to appear as a function, accepting arguments.
you can make your own easily.
struct op_test{
int i;
op_test(int i_) : i(i_){}
int operator()(int j)const { return j*i; }
};
:::
op_test ot(5);
ot(6); //5*6
The reason this is useful is because we can do thing like this.
std::vector<int> a(700); //700 ints
std::transform(a.begin(), a.end(), b.begin(), op_test(5));
//or
std::transform(a.begin(), a.end(), b.begin(), &my_func); //calls a function
std::transform(a.begin(), a.end(), b.begin(), (int i){ return i*5; }); //lambda
see here:
http://msdn.microsoft.com/en-us/library/5tk49fh2(v=vs.80).aspx
useful with
http://en.cppreference.com/w/cpp/algorithm
"//Compare (already initialised) is being invoked by it'soperator()
" Can you please elaborate on this? thanks!
– RAB
Feb 23 '12 at 19:34
thank you very much, it solved my headache :)
– RAB
Feb 23 '12 at 19:39
I am glad I could be of service.
– 111111
Feb 23 '12 at 19:40
add a comment |
//I am initialised with my default constructor (no args)
SampleClass<String> compare;
//I am initialised with my `const char*` constructor (and assignment operator)
String lhs = "abc";
String rhs = "efg";
//Compare (already initialised) is being invoked by it's `operator()`
check_equality(compare(lhs, rhs), true);
compare is already constructed. It has an operator()
implemented that allows it to appear as a function, accepting arguments.
you can make your own easily.
struct op_test{
int i;
op_test(int i_) : i(i_){}
int operator()(int j)const { return j*i; }
};
:::
op_test ot(5);
ot(6); //5*6
The reason this is useful is because we can do thing like this.
std::vector<int> a(700); //700 ints
std::transform(a.begin(), a.end(), b.begin(), op_test(5));
//or
std::transform(a.begin(), a.end(), b.begin(), &my_func); //calls a function
std::transform(a.begin(), a.end(), b.begin(), (int i){ return i*5; }); //lambda
see here:
http://msdn.microsoft.com/en-us/library/5tk49fh2(v=vs.80).aspx
useful with
http://en.cppreference.com/w/cpp/algorithm
"//Compare (already initialised) is being invoked by it'soperator()
" Can you please elaborate on this? thanks!
– RAB
Feb 23 '12 at 19:34
thank you very much, it solved my headache :)
– RAB
Feb 23 '12 at 19:39
I am glad I could be of service.
– 111111
Feb 23 '12 at 19:40
add a comment |
//I am initialised with my default constructor (no args)
SampleClass<String> compare;
//I am initialised with my `const char*` constructor (and assignment operator)
String lhs = "abc";
String rhs = "efg";
//Compare (already initialised) is being invoked by it's `operator()`
check_equality(compare(lhs, rhs), true);
compare is already constructed. It has an operator()
implemented that allows it to appear as a function, accepting arguments.
you can make your own easily.
struct op_test{
int i;
op_test(int i_) : i(i_){}
int operator()(int j)const { return j*i; }
};
:::
op_test ot(5);
ot(6); //5*6
The reason this is useful is because we can do thing like this.
std::vector<int> a(700); //700 ints
std::transform(a.begin(), a.end(), b.begin(), op_test(5));
//or
std::transform(a.begin(), a.end(), b.begin(), &my_func); //calls a function
std::transform(a.begin(), a.end(), b.begin(), (int i){ return i*5; }); //lambda
see here:
http://msdn.microsoft.com/en-us/library/5tk49fh2(v=vs.80).aspx
useful with
http://en.cppreference.com/w/cpp/algorithm
//I am initialised with my default constructor (no args)
SampleClass<String> compare;
//I am initialised with my `const char*` constructor (and assignment operator)
String lhs = "abc";
String rhs = "efg";
//Compare (already initialised) is being invoked by it's `operator()`
check_equality(compare(lhs, rhs), true);
compare is already constructed. It has an operator()
implemented that allows it to appear as a function, accepting arguments.
you can make your own easily.
struct op_test{
int i;
op_test(int i_) : i(i_){}
int operator()(int j)const { return j*i; }
};
:::
op_test ot(5);
ot(6); //5*6
The reason this is useful is because we can do thing like this.
std::vector<int> a(700); //700 ints
std::transform(a.begin(), a.end(), b.begin(), op_test(5));
//or
std::transform(a.begin(), a.end(), b.begin(), &my_func); //calls a function
std::transform(a.begin(), a.end(), b.begin(), (int i){ return i*5; }); //lambda
see here:
http://msdn.microsoft.com/en-us/library/5tk49fh2(v=vs.80).aspx
useful with
http://en.cppreference.com/w/cpp/algorithm
edited Feb 23 '12 at 19:37
answered Feb 23 '12 at 19:32
111111
11.8k43153
11.8k43153
"//Compare (already initialised) is being invoked by it'soperator()
" Can you please elaborate on this? thanks!
– RAB
Feb 23 '12 at 19:34
thank you very much, it solved my headache :)
– RAB
Feb 23 '12 at 19:39
I am glad I could be of service.
– 111111
Feb 23 '12 at 19:40
add a comment |
"//Compare (already initialised) is being invoked by it'soperator()
" Can you please elaborate on this? thanks!
– RAB
Feb 23 '12 at 19:34
thank you very much, it solved my headache :)
– RAB
Feb 23 '12 at 19:39
I am glad I could be of service.
– 111111
Feb 23 '12 at 19:40
"//Compare (already initialised) is being invoked by it's
operator()
" Can you please elaborate on this? thanks!– RAB
Feb 23 '12 at 19:34
"//Compare (already initialised) is being invoked by it's
operator()
" Can you please elaborate on this? thanks!– RAB
Feb 23 '12 at 19:34
thank you very much, it solved my headache :)
– RAB
Feb 23 '12 at 19:39
thank you very much, it solved my headache :)
– RAB
Feb 23 '12 at 19:39
I am glad I could be of service.
– 111111
Feb 23 '12 at 19:40
I am glad I could be of service.
– 111111
Feb 23 '12 at 19:40
add a comment |
It simply creates an automatic variable of type SampleClass<String>
. Then its operator()
is called with two String
arguments.
add a comment |
It simply creates an automatic variable of type SampleClass<String>
. Then its operator()
is called with two String
arguments.
add a comment |
It simply creates an automatic variable of type SampleClass<String>
. Then its operator()
is called with two String
arguments.
It simply creates an automatic variable of type SampleClass<String>
. Then its operator()
is called with two String
arguments.
answered Feb 23 '12 at 19:33
Cat Plus Plus
89.8k22166201
89.8k22166201
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f9419853%2fobject-initialization-in-c%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Which initialization?
– kennytm
Feb 23 '12 at 19:32
4
That depends on the definition of
SampleClass
which you haven't shown. I suspect it is a function object which is poorly named or this is not the actual code you are looking at.– AJG85
Feb 23 '12 at 19:33