テンプレート化されたクラスまたはテンプレート化された関数 (またはその 2 つの組み合わせ) がある場合、その関数をどのようにバインドしますか (テンプレート型パラメーターを保持します)。
以下の投稿で、明示的なテンプレート型パラメーターを使用して関数にバインドするための基本的な構文について、いくつかの助けがありましたが、プロセスでテンプレート型パラメーターを提供する機能を失いました。
今後の呼び出しでテンプレート型パラメーターを提供できるように、これを機能させることは可能ですか?
このコードを大幅にクリーンアップしましたが、正しい構文が見つからないため、明らかにコンパイルされません (これを行う方法はありますか)?
これを簡素化するために「ベクトル」要件を削除しました。
助けてくれてありがとう!
#include <functional>
#include <vector>
#include <string>
/***************************************/
template <typename CommandTemplateType>
class Storage
{
public:
// No idea how to define this vector to allow Template Parameters
// static std::vector<std::function<void<ParameterTemplateType>
// (std::shared_ptr<ParameterTemplateType>)>> Functions;
// I really don't need the collection, a single member would kick start my research:
static std::function<void<ParameterTemplateType>(std::shared_ptr<ParameterTemplateType>)> Function;
template <typename ParameterTemplateType>
static void Execute(ParameterTemplateType parameter)
{
// Look up index, or loop through all..
// I am trying to invoke the bound function with a template param:
// Functions[index]<ParameterTemplateType>(parameter);
// preferably, just:
Function<ParameterTempalteType>(parameter);
}
};
/***************************************/
template <typename TemplateType>
class MyClass
{
template <typename ParameterTemplateType>
void MyFunction(ParameterTemplateType myParameter)
{
// Do something;
}
MyClass()
{
std::string parameter = L"Test String";
// Do not know how to include the
// template<typename ParameterTemplateType> definition to bind call.
// Storage::Functions.push_back(
// std::bind(&MyClass::MyFunction<ParameterTemplateType>,
// this, std::placeholders::_1));
// Or just something like:
Storage::Function = std::bind(&MyClass::MyFunction<ParameterTemplateType>,
this, std::placeholders::_1));
/***************************************/
// Call the bound function with an explicit parameter somehow:
std::string parameter = L"Test String";
Storage::Execute<std::string>(parameter);
}
};