check how many variable arguments are passed?
-
The sample shows how you can implement functions with a variable number of arguments using C. :)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
-
HOw this works I know. But I need a way to know the number of variable arguments. Because if no one are used, I want to optimize the function...it's a lot faster. Best regards Hansjörg
if optimization is your concern, then avoid to use variable number of arguments (or use a mechanism such as the
main
one, i.e. an array of arguments and its length passed to your function). BTW, referring to the MSDN sample (link given by Roger Stoltz) [^], nothing prevents you to use the marker to indicate the total number of arguments: does this fit your needs? :)If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
-
if optimization is your concern, then avoid to use variable number of arguments (or use a mechanism such as the
main
one, i.e. an array of arguments and its length passed to your function). BTW, referring to the MSDN sample (link given by Roger Stoltz) [^], nothing prevents you to use the marker to indicate the total number of arguments: does this fit your needs? :)If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
The marker is not so a good was i think... The problem is that it is not possible to define 2 methods in a class (same name). One with variable length parameter and one without...This would be the best solution for me too... I want to make a logger class in this way... class Logger{ void Log(LPCSTR format,...); void Log(LPCSTR message); } something like that. It is easier for the user to have allways the same name...Do you know any solution for that? arrays are also not so good..it's not easy to use... if not I have to give the function another name.... :( Best regards hansjörg
-
The marker is not so a good was i think... The problem is that it is not possible to define 2 methods in a class (same name). One with variable length parameter and one without...This would be the best solution for me too... I want to make a logger class in this way... class Logger{ void Log(LPCSTR format,...); void Log(LPCSTR message); } something like that. It is easier for the user to have allways the same name...Do you know any solution for that? arrays are also not so good..it's not easy to use... if not I have to give the function another name.... :( Best regards hansjörg
hansipet wrote:
Do you know any solution for that?
No. BTW, why don't you emulate the behaviour of
cout
instead of the one ofprintf
? :)If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
-
hansipet wrote:
Do you know any solution for that?
No. BTW, why don't you emulate the behaviour of
cout
instead of the one ofprintf
? :)If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
-
The tricky part is customizing the
>>
operator. Have a look, for instance, at this article http://www.codeproject.com/cpp/Encoder.asp[^]. :)If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
-
The tricky part is customizing the
>>
operator. Have a look, for instance, at this article http://www.codeproject.com/cpp/Encoder.asp[^]. :)If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
-
The marker is not so a good was i think... The problem is that it is not possible to define 2 methods in a class (same name). One with variable length parameter and one without...This would be the best solution for me too... I want to make a logger class in this way... class Logger{ void Log(LPCSTR format,...); void Log(LPCSTR message); } something like that. It is easier for the user to have allways the same name...Do you know any solution for that? arrays are also not so good..it's not easy to use... if not I have to give the function another name.... :( Best regards hansjörg
If you're using this for logging purposes, why don't use
CString::FormatV()
? Like this:void <YourClassName>::Log( LPTSTR pText, ... )
{
CString LogText;
va_list args;
va_start( args, pText );
LogText.FormatV( pText, args );// Do whatever you want with the LogText...
}
This would make the function call similar to
printf()
.
"It's supposed to be hard, otherwise anybody could do it!" - selfquote
"High speed never compensates for wrong direction!" - unknown -
If you're using this for logging purposes, why don't use
CString::FormatV()
? Like this:void <YourClassName>::Log( LPTSTR pText, ... )
{
CString LogText;
va_list args;
va_start( args, pText );
LogText.FormatV( pText, args );// Do whatever you want with the LogText...
}
This would make the function call similar to
printf()
.
"It's supposed to be hard, otherwise anybody could do it!" - selfquote
"High speed never compensates for wrong direction!" - unknown -
hansipet wrote:
I think this is in the MFC library and I don't can use it...
Ok, then use
vsprintf()
. See here[^]. It works the same as theCString
alternative, but in this case you have to provide the output buffer.
"It's supposed to be hard, otherwise anybody could do it!" - selfquote
"High speed never compensates for wrong direction!" - unknown