gpt4 book ai didi

c++ - 确保 C++ 模板不会在缺少函数的情况下进行编译

转载 作者:行者123 更新时间:2023-11-30 01:18:45 25 4
gpt4 key购买 nike

我有一个模板类 template<typename T> Foo使用 T 的某些功能.然而,事实证明即使没有 T 代码也可以编译。具有所有必需的成员函数。示例如下。

template<class T>
struct Foo {
T t;
int foo() {
return t.foo();
}

int bar() {
return t.bar();
}
};

struct baz {
int foo() {
return 42;
}
};

int main() {
Foo<baz> x;
return x.foo();
}

如果 T,我如何确保代码不会编译?不提供所有必要的功能?我知道如果我使用包含所有继承并从中派生的基类,就可以做到这一点。但是,如果这可以在没有太多额外代码的情况下使用模板完成,我将非常感激。

我在 Linux 上使用 gcc 4.8.2。

最佳答案

为了要求一个类型是具有某些可访问成员函数的类类型,只需引用它们。例如。在 Foo 的每个构造函数中你可以说

Foo()
{
(void) sizeof( decltype( t.foo() ) );
(void) sizeof( decltype( t.bar() ) );
}

上面的内容比您的示例所需的要多一些,但展示了如何轻松确保函数可以使用特定参数调用或具有特定签名。

或者您可以将此类表达式放在 static_assert 中。

关于c++ - 确保 C++ 模板不会在缺少函数的情况下进行编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22212740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com