我不是模板的新手,但我遇到了一个相当奇怪的问题,我需要将模板类型分离到我正在处理的数据序列化程序的组件中.这很难解释,所以我已经证明了这一点.
这是我的简化示例问题,example.cpp.
template<typename T> void foo(T& arg) { }
template<typename T, typename V> void foo(T<V>& arg) { }
int main(int argc, char *argv[])
{
foo(argc);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到一个错误,然后一个警告,似乎表明它正在尝试实例化两个函数,只有其中一个是合适的.
$ g++ -Wall -W example.cpp
example.cpp:2:43: error: ‘T’ is not a template
template<typename T, typename V> void foo(T<V>& arg) { }
^
example.cpp: In instantiation of ‘void foo(T&) [with T = int]’:
example.cpp:6:11: required from here
example.cpp:1:34: warning: unused parameter ‘arg’ [-Wunused-parameter]
template<typename T> void foo(T& arg) { } …Run Code Online (Sandbox Code Playgroud) 我只是想知道g ++是否真的符合链式构造函数的C++ 11标准(或者不管它叫什么).
例:
class MyClass
{
MyClass(int x, int y = 0);
MyClass(int y = 0) : MyClass(8, y) {}
};
Run Code Online (Sandbox Code Playgroud)
即使我已经包含-std = c ++ 0x(或-std = gnu ++ 0x)参数(没有-std = c ++ 11),我仍然会收到此错误
错误:类型'MyClass'不是'MyClass'的直接基础
我不想得出结论,我已经环顾网络,但似乎无法找到任何有关它的信息.
顺便说一下,我正在使用g ++(Debian 4.6.2-4)4.6.2
我正在寻找一种干净的STL方式来使用现有的C缓冲区(char*和size_t)作为字符串流.我更喜欢使用STL类作为基础,因为它具有内置的安全措施和错误处理.
注意:我不能使用额外的库(否则我会使用QTextStream)
问题:如何从非POD类中访问程序集中的成员变量?
阐述:
我已经为类成员函数编写了一些内联汇编代码,但是我想到的是如何访问类成员变量.我尝试过offsetof宏,但这是一个非POD类.
我正在使用的当前解决方案是将指向全局范围的指针分配给成员变量,但这是一个混乱的解决方案,我希望有更好的东西,我不知道.
注意:我正在使用G ++编译器.使用英特尔语法Asm的解决方案会很好但我会采取任何措施.
我想做的例子(英特尔语法):
class SomeClass
{
int* var_j;
void set4(void)
{
asm("mov var_j, 4"); // sets pointer SomeClass::var_j to address "4"
}
};
Run Code Online (Sandbox Code Playgroud)
目前的hackish解决方案:
int* global_j;
class SomeClass
{
int* var_j;
void set4(void)
{
asm("mov global_j, 4"); // sets pointer global_j to address "4"
var_j = global_j; // copy it back to member variable :(
}
};
Run Code Online (Sandbox Code Playgroud)
这些是粗略的例子,但我认为他们得到了重点.