Я столкнулся с проблемой. Я создал фрагмент кода C ++ из автоматизированного сценария. В этом я создаю объект, скажем, х, и он обрабатывается как хх. Это около 2000 обработчиков. Из-за этого есть вероятность, что имя объекта - x, а имя обработчика ошибочно - x, а не xx. Обратного не происходит. Поскольку обработчик имеет значение shared_ptr , он принимает это без какой-либо ошибки компилятора. То, что я ищу, это чтобы гарантировать ошибку компилятора и избежать ошибки времени выполнения. Код выглядит следующим образом.
#include <memory>
#include <iostream>
#include <string>
using namespace std;
class A
{
public:
void foo()
{
std::cout << "Foo";
}
};
typedef shared_ptr<A> A_SharedPtr;
typedef shared_ptr<void> A_Handler;
struct packet
{
A_SharedPtr mem_1;
A_Handler mem_2;
packet(A_SharedPtr a1, A_Handler a2)
{
mem_1 = a1;
mem_2 = a2;
}
};
int main() {
A_SharedPtr x;
A_Handler xx;
packet p1(x, x); //POTENTIAL ERROR WHICH LEADS TO RUNTIME EXCEPTION
packet p2(x, xx);//CORRECT ONE
}
Не могли бы вы предположить, что программист получит ошибку компиляции при попытке
packet p1(x, x);
сказать, что второй аргумент неверен?