gpt4 book ai didi

当模板参数相同时,C++ 优化类模板函数

转载 作者:搜寻专家 更新时间:2023-10-31 00:23:24 24 4
gpt4 key购买 nike

我有一个模板类,其中有一个模板方法,提供两个模板参数 T 和 U。该操作非常昂贵,并且在分析中显示为 CPU 时间的主要用途。我可以稍微优化它,但仅限于 T == U 的情况(这很常见),但是我不确定这样做的语法......

有问题的类和方法如下所示:

template<typename T>class Foo
{
public:
...
template<typename U>U bar()const;
};

Foo::bar 通常是从其他一些模板代码中调用的,所以即使我创建了一个单独的方法(例如“T fastBar()const”),我也不知道如何让其他模板代码调用它尽可能的版本...

我试图为 T == U 创建一个显式特化,但是 VC9 给了我错误

template<typename T>template<>T Foo<T>::bar<T>()const

error C2768: 'Foo::bar' : illegal use of explicit template arguments

最佳答案

所以关于模板类的模板成员的显式特化有一些奇怪的事情。看这个question .

一个解决方法是使用辅助类

template< typename T, typename U>
struct FooDispatchHelper
{
static U dispatch( const Foo<T> * f )
{
return f->template bar_internal<U>();
}
};

template< typename T >
struct FooDispatchHelper<T,T>
{
static T dispatch( const Foo<T> * f )
{
return f->bar_fast();
}
};

template<typename T>class Foo
{
public:
...
template<typename U>U bar() const
{
return FooDispatchHelper<T,U>::dispatch( this );
}

template<typename U> U bar_internal() const;
T bar_fast() const;

};

可以找到更完整的示例 here

关于当模板参数相同时,C++ 优化类模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2150946/

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