Я узнал, почему. это относится к вычету аргумента шаблона.
Если вы видите класс шаблона «атомарный», у вас есть класс первичных T и классов, специализирующихся на T *. то я сравниваю указатель на функцию и указатель на член функции. code
можно увидеть ниже:
#include <iostream>
template<typename T>
struct A
{
static void Call(){std::cout << "Call T" << std::endl;}
};
template<typename T>
struct A<T*>
{
static void Call(){std::cout << "Call T*" << std::endl;}
};
struct B {};
int main()
{
A<void(B::*)()>::Call();
A<void(*)()>::Call();
}
output:
Call T
Call T*
Предложить улучшение, использовать двойной указатель на член функции:
обновление в класс от std::atomic<ProcessPtr> _processPtr;
до std::atomic<ProcessPtr*> _processPtr;
и обновление в основной функции:
int main()
{
test t;
test::ProcessPtr d = &test::process;
t._processPtr = &d;
(t.*(*(t._processPtr)))();
}
Я на самом деле понял, что это частично из ранее прикрепленной ссылки. Похоже, что во всех файлах SQL, которые вызывали ошибку, отсутствовал оператор потока GO в конце файла - это, похоже, требуется после каждой команды EXECUTE, даже в конце файла.