gpt4 book ai didi

c++ - 由其他模板类的内部 typedef 定义的类型的模板参数

转载 作者:太空宇宙 更新时间:2023-11-04 12:13:59 24 4
gpt4 key购买 nike

#include <iostream>

struct A
{
bool f( int a ) { std::cout << "int" << std::endl; return true;};
bool f( int a, int b ) { std::cout << "two int" << std::endl; return true;};
bool f( float a ) {std::cout << "float" << std::endl; return true;};
bool f( float a, float b ) {std::cout << "two float" << std::endl; return true;};
};

template <typename T>
struct Type
{
typedef bool (A::*One)(T);
typedef bool (A::*Two)(T, T);
};

template <typename T, typename Type<T>::One F >
void run(A & a)
{
T tmp = 0;
(a.*F)(tmp);
}


int main(int argc, char ** argv )
{
A a;
run<int, &A::f>(a);
run<float, &A::f>(a);

return 0;
}

问题在于 typename Type<T>::One F 的语法.如果我指定实际的方法指针而不是使用来自 Type 的 typedef它工作正常(参见 herehere )。有没有办法使用 Type 中的那些类型定义?作为模板参数?

最佳答案

我目前的猜测是 IBM xlC 和 Sun CC 都有错误。

给出错误的版本可能因在模板参数上下文中使用 typename 而混淆,但用于指示从属名称是一种类型而不是引入类型参数。请注意,这些编译器不符合标准,并且不要求 typename 指示从属名称是一种类型,即使在其他需要它的上下文中也是如此(即使对于您的代码编译的 Sun CC 版本)。

关于c++ - 由其他模板类的内部 typedef 定义的类型的模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8532961/

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