0

是否有可能克服这个问题:

                class Constants
                { 
                    static Std_ReturnType dtcSitzheizungSchalteMittelkonsoleHlTasterHaengt( UInt8 const value )
                    {
                        return Rte_Call_demSitzheizungSchalteMittelkonsoleHlTasterHaengt_SetEventStatus( value );
                    }

                    static DTCSetter * const DTCSETTER_WITH_NO_DID[SEAT_HEATING_DTCS_COUNT]; //how to use an element of this array as a non type template parameter ?
                };

                template class ButtonStuckPolicy< &Constants::dtcSitzheizungSchalteMittelkonsoleHlTasterHaengt >; //works

在 C++ 03 中?

一般来说,是否可以将静态数组元素作为非类型模板参数传递?

谢谢

4

2 回答 2

1

在 C++03 中,任何具有外部链接的对象的地址都是公平的游戏。但不是,除非它是const并且用整数常量表达式初始化。正如您所拥有的,子对象在 C++11 之前不需要应用。

您所拥有的是将地址参数传递给int参数,这在任何情况下都不起作用。

这在 C++11 中是可以的:

const int x[100] = {}; // zero-initialize
template<int T>
class foo;
foo<x[0]> y;

这是这样的:

int x[100];
template<int *T>
class foo;
foo<&x[0]> y;

这在 C++03 中也可以,因为它使用整个命名对象的地址:

int x[100];
template<int *T>
class foo;
foo<x> y;
于 2013-07-20T07:08:48.347 回答
0

我的解决方案 - 创建模板:

template <int* arr, int index>
class indexer{
public:
    static inline int* element(){ return arr+index; }
};

那你就说

template <int* arr, int index>
foo{
   // Here use indexer<arr,index>::element();
};

int x[10];
foo<x,0> f;

或者甚至:

template <typename T>
bar{
   //here use T::element();
};

int x[10];
bar<indexer<x, 0> > b;

它不如 漂亮foo<&x[0]>,而且你所有的专业课程int*都必须改变专业,但你可能不会变得更好(并且工作;)

于 2013-07-20T07:23:41.940 回答