[英]How can I call a function of a C++ DLL that accepts a parameter of type stringstream from C#?
[英]How can I use stringstream as a parameter for a c++ function?
我一直在尋找將字符串附加到其他基元的解決方案,但發現stringstream是最簡單的解決方案。 但是,我想簡化流程,所以我想創建一個函數來簡化其使用。 如果您要提出替代的串聯方法,我需要最終結果為char *。 我使用了一個循環(i):
std::stringstream ss;
ss << "test" << i;
char* name = new char[ss.str().size() + 1];//allocate
strcpy(name, ss.str().c_str());//copy and put (char*)c_str in name
所以輸出是鏈接test1test2test3 ...的東西。這是我可以提出的最合理的解決方案。 我試圖將其放入易於使用的函數中,但遇到了問題。 我想做類似的事情:
char* string_to_pointer( char* dest, std::stringstream* _ss ) {
char* result = new char[_ss->str().size() + 1];
strcpy(result, _ss->str().c_str());
return result;
}
然后,我可以做類似的事情:
std::stringstream ss;
ss << "test" << i;
char* name = string_to_pointer( name, &ss );
我對C ++還是很陌生,在語法上似乎是正確的用法,但是我遇到了運行時問題,並且歡迎提供解決方案,以解決如何在不使用Boost的情況下使它易於使用的問題。
char* string_to_cstring ( const std::string &_ss )
會更清潔! 與string_to_cstring(ss.str())
需要返回的C字符串可更改嗎? 因為如果沒有,請在需要的地方使用ss.str().c_str()
!
或使用:
char* result = new char[ss.str().size() + 1] (); // value initialized
ss.str().copy(result,std::string::npos);
使用std::stringstream::str()
函數檢索字符串的內容。
例:
int foo = 42;
double bar = 12.67;
std::stringstream ss;
ss << "foo bar - " << foo << ' ' << bar;
std::string result = ss.str();
如果您不想進一步修改字符串,現在可以簡單地調用result.c_str()
來獲取const char*
。 但是,如果您確實需要可修改的char*
,則必須將字符串的內容復制到cstring:
std::unique_ptr<char[]> cstring = new char[result.size() + 1];
strcpy(cstring.get(), result.c_str());
像這樣的事情呢:
#include <string>
#include <sstream>
class ToString {
std::ostringstream stream;
public:
template<typename T>
inline ToString &operator<<(const T&val) {
stream << val;
return *this;
}
inline operator std::string() const {
return stream.str();
}
};
您可以像這樣使用它:
std::string str = ToString() << "Test " << 5 << " and " << 4.2;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.