// STL8.cp #include #include #include #include template class PStrTemp { PascalString s; void MakePString(const char *cString) { std::size_t length= std::strlen(cString); s[0] = length > (sizeof(s) - 1)? (sizeof(s) - 1): length; std::strncpy((char *)&s[1], cString, (sizeof(s) - 1)); }; public: PStrTemp(const char *cString) { MakePString(cString); }; PStrTemp(const std::string& stdString) { MakePString(stdString.c_str()); }; operator const unsigned char *() const {return s;}; }; typedef PStrTemp ConstStr255; typedef PStrTemp ConstStr63; typedef PStrTemp ConstStr32; typedef PStrTemp ConstStr31; typedef PStrTemp ConstStr27; typedef PStrTemp ConstStr15; void PStringFunction(ConstStr255Param stringValue) { std::string outString((const char *)&stringValue[1], *stringValue); std::cout << outString << std::endl; } int main() { char *a = "C string"; std::string b = "std::string"; PStringFunction(ConstStr255(a)); PStringFunction(ConstStr15(b)); } // C string // std::string