2

我是 ChaiScript 的初学者。

我尝试std::wstring在 ChaiScript 中使用类型。

std::string 类型效果很好。

#include <iostream>
#include <chaiscript/chaiscript.hpp>
#include <chaiscript/chaiscript_stdlib.hpp>

int main()
{
    chaiscript::ChaiScript chai(chaiscript::Std_Lib::library());

    std::cout << chai.eval<std::function<int (std::string)> >(
        "fun(s){"       
        "   if(s==\"aaa\"){"
        "       print(\"1\");"      
        "   }"      
        "   if(s[1]=='b'){"
        "       print(\"2\");"
        "   }"
        "   return 3;"
        "}"
    )(std::string("abcd")); 
}

D:\TestWork\test_chaiscript>t1.exe
2
3

std::wstring类型引发异常。

#include <iostream>
#include <chaiscript/chaiscript.hpp>
#include <chaiscript/chaiscript_stdlib.hpp>

int main()
{
    chaiscript::ChaiScript chai(chaiscript::Std_Lib::library());

    std::cout << chai.eval<std::function<int (std::wstring)> >(
        "fun(s){"       
        "   if(s==\"aaa\"){"
        "       print(\"1\");"      
        "   }"      
        "   if(s[1]=='b'){"
        "       print(\"2\");"
        "   }"
        "   return 3;"
        "}"
    )(std::wstring(L"abcd"));
}

D:\TestWork\test_chaiscript>t2.exe
在抛出 'chaiscript::exception::eval_error'
what() 的实例后调用终止:错误:“找不到合适的 '==' 运算符。” 带参数:(NSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEE, const string)

此应用程序已请求运行时以不寻常的方式终止它。
请联系应用程序的支持团队以获取更多信息。

使用 ChaiScript git 版本和 mingw-w64 构建 5.1.0。

g++ t2.cpp -std=c++14 -O2 -Os -Wall -mthreads -o t2.exe -DWIN32 -D_WIN32 -DUNICODE -D_UNICODE -Id:\myprj\chaiscript_git\include -static-libstdc++ -static-libgcc -Wl,-Bstatic -lstdc++ -lpthread -Wl,-Bdynamic

vs2013也是一样。

如何std::wstring在 ChaiScript 中使用类型?

4

1 回答 1

3

std::wstring就像 ChaiScript 中的任何其他类型一样 - 你必须告诉 ChaiScript 你想如何使用它。

在这种情况下,您正在尝试执行==比较,但没有为 ChaiScript 提供operator==(const std::wstring &, const std::wstring &)可供它使用的函数。

最简单的方法是使用现有代码std::string并公开所有相同的功能。

例如:

#include <chaiscript/dispatchkit/bootstrap_stl.hpp>

chai.add(chaiscript::bootstrap::standard_library::string_type<std::wstring>("wstring"));

有关参考,请参阅初始化.hpp 的bootstrap.hpp 代码std::string

于 2015-06-14T02:58:06.397 回答