从这个类构造函数调用类构造函数>(不同的参数)?
calling class constructor from this->class constructor (different parameters)?
我正在尝试创建一个指针访问类,其目标是简单地访问已知的内存位置。
现在我有这个类:
template<class T = DWORD> struct Pointer
{
private://minimum 2 params
std::vector<T> params;
Pointer()
{}
Pointer(T a)
{params.push_back(a);}
public:
Pointer(T a, T b)
{params.push_back(a);Pointer::Pointer(b);}
Pointer(T a, T b, T c)
{params.push_back(a);Pointer::Pointer(b,c);}
Pointer(T a, T b, T c, T d)
{params.push_back(a);Pointer::Pointer(b,c,d);}
Pointer(T a, T b, T c, T d, T e)
{params.push_back(a);Pointer::Pointer(b,c,d,e);}
Pointer(T a, T b, T c, T d, T e, T f)
{params.push_back(a);Pointer::Pointer(b,c,d,e,f);}
Pointer(T a, T b, T c, T d, T e, T f, T g)
{params.push_back(a);Pointer::Pointer(b,c,d,e,f,g);}
//all the way to ... z
T* ResolvePointer(/*,bool fallback = false*/)
{
T variable = params[0];
try
{
auto it = params.begin();
++it;
for(; it != params.end(); ++it)
variable = *reinterpret_cast<T*>(variable) + *it;
}
catch(...)
{
/*if(fallback){
static char fallback_location[2048];
variable = reinterpret_cast<T>(&fallback_location[0]);
}else{*/
variable = NULL;
//}
}
return reinterpret_cast<T*>(variable);
}
T* operator()()
{
return ResolvePointer();
}
};
但是每当我调用
(例如:
Player[slot].Money = Pointer<int>(0x00400000+0x008E98EC,0xD8+(0x4*slot),0xE4,0x00,0x4)();
,
params
向量总是只有a
:(
我做错了什么?怎么解呢?
p。S:我想使用可变模板,但我使用的是MICROSOFT VISUAL C++ 11
从另一个构造函数调用一个构造函数实际上是在重构整个对象,所以这是不"理智"的。
从c++ 11开始,可以在同一对象的构造函数之间进行委托,但必须在初始化列表级别
Pointer(T a, T b, T c) : Pointer(a, b)
{
params.push_back(c);
}
而不是定义一组函数,可变模板可能会有所帮助:
template<class T>
class Pointer
{
std::vector<T> params;
template<class A, class... AA>
void push(const A& a, const AA&... aa)
{ push(aa...); params.push_back(a); } //< invert these calls depending on the order you wish
void push() //the final recourse
{}
public:
template<class... AA>
Pointer(const AA&... aa)
{ push(aa...); }
};
构造函数中的Pointer::Pointer(...)
行不是构造函数委托,它是临时对象的声明。你基本上是在告诉编译器扔掉除了参数a
之外的所有东西。您需要的语法(VC11不支持)是:
Pointer(T a, T b, T c) : Pointer(a, b) {
params.push_back(c);
}
老实说,这个类似乎从一开始就构思得很差。我想如果你问的是你想通过这门课达到什么目标,而不是如何实现它,我们会给你更多的帮助。
相关文章:
- 函数调用中参数的顺序重要吗
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何用参数值调用函数(仅在运行时已知)
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 函数调用C++中的参数太少
- 将参数打包的参数传递到 std::queue 中,以便稍后使用不同的函数调用
- 根据参数数调用 mixin 基类的构造函数
- 使用并行参数向量调用元素向量的成员函数
- uncrustify:如何将多行 C 函数调用的参数组合到一行上?
- 函数调用中的参数过多
- 使用显式模板参数列表和 [temp.arg.explicit]/3 的函数调用的演绎失败
- 可变参数模板函数:调用没有匹配函数,std::endl
- 对可变参数函数的递归调用的链接器错误
- 宏函数调用缺少参数警告,即使给定了参数
- 具有不同类型的可选参数的调用方函数
- C++ 使函数调用依赖于模板参数
- 迭代器的模板参数:函数在调用时推断类型?
- 如果我提前将参数声明为变量而不是将它们内联写入函数调用,那有什么区别(在内存方面)?
- 链接可变参数函数调用
- 递归可变参数函数调用对简单 if.else 语句的性能