首页 > 解决方案 > 编译时的 C++ 接口声明?

问题描述

我试图声明一个任意类型变量(比如x),唯一的要求是它包含一个已知签名的函子,比如double operator()(double x)避免std::function开销。

特别是,假设用户应该能够初始化x一个包含额外数据 + 所需运算符的对象,但声明应该对类型保持矛盾,只说明运算符的存在。

我试图做的可能看起来有点做作,但在我看来应该有一种简单的方法来实现这一点,尤其是在现代 C++ 中,对吧?我见过模板推导,auto关键字和概念,但我无法将这些东西放在一起,以实现我所需要的。

每个请求的伪代码:


// auto should be instead some generic type specification that requires double operator(double) that I don't know how to write
auto x;

//Here's an example that would conform to x type specification above
struct Field
{
    double operator()(double time);
}
void main()
{
    x = Field();
}

标签: templatesdeclarationspecialization

解决方案


推荐阅读