template
auto LoggerBase::LogMessage(T&&... args) -> void
{
if (Verbose)
{
constexpr int size{ 256 };
char msgBuffer[size];
auto size_copied = sprintf_s(msgBuffer, size, std::forward(args)...);
std::string msg(msgBuffer);
LogMessageQuery.Add(msg);
}
}
template
auto LoggerBase::LogMessageW(T&&... args) -> void
{
if (Verbose)
{
constexpr int size{ 256 };
wchar_t msgBuffer[size];
auto size_copied = swprintf_s(msgBuffer, size, std::forward(args)...);
std::wstring wmsg(msgBuffer);
LogMessageQuery.Add(wmsg);
}
}
< /code>
In: < /p>
template
auto LoggerBase::LogMessageAny(T&&... args) -> void
{
if (Verbose)
{
using firstType = typename std::tuple_element::type;
constexpr int size{ 256 };
if (typeid(firstType) == typeid(const wchar_t*))
{
wchar_t msgBuffer[size];
auto size_copied = swprintf_s(msgBuffer, size, std::forward(args)...);
std::wstring wmsg(msgBuffer);
LogMessageQuery.Add(wmsg);
}
else if (typeid(firstType) == typeid(const char*))
{
char msgBuffer[size];
auto size_copied = sprintf_s(msgBuffer, size, std::forward(args)...);
std::string msg(msgBuffer);
LogMessageQuery.Add(msg);
}
}
}
< /code>
Diese Tests werden jedoch nicht kompiliert: < /p>
typedef void(__stdcall* MessageChangedCallback)(const wchar_t* string);
static MessageChangedCallback log = [](const wchar_t* z)
{
Logger::WriteMessage(z);
};
TEST_CLASS(LoggerBaseTests)
{
public:
TEST_METHOD(LogMessageAny_stringTest)
{
LoggerBase sut(log);
sut.LogMessageAny("This is a good std::string TEST %i!", 123);
}
TEST_METHOD(LogMessageAny_wstringTest)
{
LoggerBase sut(log);
sut.LogMessageAny(L"This is a good std::wstring TEST %i!", 456);
}
};
< /code>
Schweregradcode Beschreibung Projektdatei -Unterdrückungszustandsdetails
Fehler C2664 'int SWPRINTF_S (WCHAR_T *const, const size_t, const wchar_t
*const, ...) ': Argument 3 von' const char [36] 'in' const wchar_t *const
'Utiltests kann nicht konvertiert werden C: \ Benutzer \ Soleil \ Source \ repos \ sublimetriptych \ util \ loggerbase *const, const size_t, const char *const
, ...) ': Argument 3 kann nicht konstant warch wary_t [url=viewtopic.php?t=12659]konvertieren[/url] [37] 'to' const
char *const
'Utiltests C: \ Benutzer \ Soleil \ Source \ Repos \ Sublimetriptycha \ util \ loggerbase.h 85 < /p>
< /blockquote >
Die zwei Funktionen in der Inital funktionieren gut. Geben Sie den Schalter richtig ein? dh am Ruf von Sprintf (): Etwas in der Denkweise von swprintf_s (msgbuffer, Größe, (const char*) args [0], std :: Forward (args [1 ..]) ... )
Wie kann ein Weiterleitungsparameterpack spezialisiert?
tun Arbeiten Sie mit zwei Parametern, aber ich muss ein generisches Parameterpaket für Args oder Index> 1 führen. Daher handelt es sich nicht um eine Lösung. Soll ich mich bereits in den Parametern der Funktion logMessage () spezialisieren und sie stattdessen überladen?
Ich versuche, zwei Funktionen in eine allgemeinere Funktion zusammenzuführen: < /p> [code]template auto LoggerBase::LogMessage(T&&... args) -> void { if (Verbose) { constexpr int size{ 256 }; char msgBuffer[size]; auto size_copied = sprintf_s(msgBuffer, size, std::forward(args)...); std::string msg(msgBuffer); LogMessageQuery.Add(msg); } }
template auto LoggerBase::LogMessageW(T&&... args) -> void { if (Verbose) { constexpr int size{ 256 }; wchar_t msgBuffer[size]; auto size_copied = swprintf_s(msgBuffer, size, std::forward(args)...); std::wstring wmsg(msgBuffer); LogMessageQuery.Add(wmsg); } } < /code> In: < /p> template auto LoggerBase::LogMessageAny(T&&... args) -> void { if (Verbose) { using firstType = typename std::tuple_element::type; constexpr int size{ 256 }; if (typeid(firstType) == typeid(const wchar_t*)) { wchar_t msgBuffer[size]; auto size_copied = swprintf_s(msgBuffer, size, std::forward(args)...); std::wstring wmsg(msgBuffer); LogMessageQuery.Add(wmsg); } else if (typeid(firstType) == typeid(const char*)) { char msgBuffer[size]; auto size_copied = sprintf_s(msgBuffer, size, std::forward(args)...); std::string msg(msgBuffer); LogMessageQuery.Add(msg); } } } < /code> Diese Tests werden jedoch nicht kompiliert: < /p> typedef void(__stdcall* MessageChangedCallback)(const wchar_t* string); static MessageChangedCallback log = [](const wchar_t* z) { Logger::WriteMessage(z); };
TEST_CLASS(LoggerBaseTests) { public: TEST_METHOD(LogMessageAny_stringTest) { LoggerBase sut(log); sut.LogMessageAny("This is a good std::string TEST %i!", 123); }
TEST_METHOD(LogMessageAny_wstringTest) { LoggerBase sut(log); sut.LogMessageAny(L"This is a good std::wstring TEST %i!", 456); }
}; < /code>
Schweregradcode Beschreibung Projektdatei -Unterdrückungszustandsdetails Fehler C2664 'int SWPRINTF_S (WCHAR_T *const, const size_t, const wchar_t *const, ...) ': Argument 3 von' const char [36] 'in' const wchar_t *const 'Utiltests kann nicht konvertiert werden C: \ Benutzer \ Soleil \ Source \ repos \ sublimetriptych \ util \ loggerbase *const, const size_t, const char *const , ...) ': Argument 3 kann nicht konstant warch wary_t [url=viewtopic.php?t=12659]konvertieren[/url] [37] 'to' const char *const 'Utiltests C: \ Benutzer \ Soleil \ Source \ Repos \ Sublimetriptycha \ util \ loggerbase.h 85 < /p> < /blockquote > Die zwei Funktionen in der Inital funktionieren gut. Geben Sie den Schalter richtig ein? dh am Ruf von Sprintf (): Etwas in der Denkweise von swprintf_s (msgbuffer, Größe, (const char*) args [0], std :: Forward (args [1 ..]) ... ) [/code]
Wie kann ein Weiterleitungsparameterpack spezialisiert? tun Arbeiten Sie mit zwei Parametern, aber ich muss ein generisches Parameterpaket für Args oder Index> 1 führen. Daher handelt es sich nicht um eine Lösung. Soll ich mich bereits in den Parametern der Funktion logMessage () spezialisieren und sie stattdessen überladen?
Wie ich nach dem Wert des Schlüssels in einem mehrdimensionalen Array suchen und von dort aus Impressionen und Einnahmen anzeigen kann. Array-Zeilen können eine unbegrenzte Anzahl von Ländern...
Ich habe einen einfachen Texteditor, mit dem der Benutzer nach einem Begriff im Text suchen und zum nächsten oder vorherigen Vorkommen navigieren kann. Das Problem, mit dem ich konfrontiert bin,...
Ich habe einen einfachen Texteditor, mit dem der Benutzer nach einem Begriff im Text suchen und zum nächsten oder vorherigen Vorkommen navigieren kann. Das Problem, mit dem ich konfrontiert bin,...