1

给定

#include <locale>

struct Q;
struct R{ void operator()(Q*) { } };
class S : public std::codecvt<char, char, Q*> { } ;

int main() {
    char *p;
    char *q;
    const char *r;
    char *s;
    char *t;
    char *u;
    Q* _q;
    std::use_facet<std::codecvt<char, char, Q*> >(std::locale(std::locale::classic(), new S)).in(_q, p, q, r, s, t, u);
}

链接器随着消息而死

[vtable for std::codecvt]+0x50):未定义引用 'std::codecvt::do_max_length() const',对所有 codecvt do_* 成员重复,并且

[vtable for S]+0x20): 未定义引用 'std::codecvt::do_out(Q*&, char const*, char const*, char const*&, char*, char*, char*&) const' ,对所有 do_* 成员函数重复。

当 StateT 不是std::mbstate_t时,编译工作还需要哪些专业化?

4

1 回答 1

4

codecvt除了标准要求的两个专业化之外,很有可能永远不会实现:codecvt<wchar_t, char, mbstat_t>codecvt<char, char, mbstate_t>. 很难有一个通用的方法来进行编码转换。因此,如果您想使用自己的模板专业化,您可能必须自己实现codecvt(可能包括其基类)的每个功能。

于 2011-11-28T08:12:08.100 回答