小编Adr*_*thy的帖子

我可以对(非成员)函数使用部分模板专门化吗?

我正在尝试在(非成员)函数上使用部分模板特化,而我正在绊倒语法.我已经在StackOverflow中搜索了其他部分模板特化问题,但这些问题涉及类或成员函数模板的部分特化.

作为一个起点,我有:

struct RGBA {
    RGBA(uint8 red, uint8 green, uint8 blue, uint8 alpha = 255) :
        r(red), g(green), b(blue), a(alpha)
    {}

    uint8 r, g, b, a;
};

struct Grayscale {
    Grayscale(uint8 intensity) : value(intensity) {}

    uint8 value;
};

inline uint8 IntensityFromRGB(uint8 r, uint8 g, uint8 b) {
    return static_cast<uint8>(0.30*r + 0.59*g + 0.11*b);
}

// Generic pixel conversion.  Must specialize this template for specific
// conversions.
template <typename InType, typename OutType>
OutType ConvertPixel(InType source);
Run Code Online (Sandbox Code Playgroud)

我可以完全专门化ConvertPixel来制作RGBA到灰度转换函数,如下所示:

template <>
Grayscale ConvertPixel<RGBA, Grayscale>(RGBA …
Run Code Online (Sandbox Code Playgroud)

c++ templates partial-specialization

4
推荐指数
2
解决办法
1291
查看次数

Python:如何区分继承的方法

新手Python问题.我有一个继承自几个类的类,一些特化类覆盖了基类中的一些方法.在某些情况下,我想调用非专业方法.这可能吗?如果是这样,语法是什么?

class Base(object):
    def Foo(self):
        print "Base.Foo"

    def Bar(self):
        self.Foo()  # Can I force this to call Base.Foo even if Foo has an override?


class Mixin(object):
    def Foo(self):
        print "Mixin.Foo"


class Composite(Mixin, Base):
    pass


x = Composite()
x.Foo()  # executes Mixin.Foo, perfect
x.Bar()  # indirectly executes Mixin.Foo, but I want Base.Foo
Run Code Online (Sandbox Code Playgroud)

python oop inheritance

4
推荐指数
1
解决办法
430
查看次数

取消定义最小和最大宏

在源代码中,我看到min和max未定义.可能是什么原因?

// remove stupid MSVC min/max macro definitions
#ifdef WIN32
   #undef min
   #undef max
#endif
Run Code Online (Sandbox Code Playgroud)

c++ c-preprocessor

4
推荐指数
1
解决办法
868
查看次数

米斯拉2012背后的理由不允许在不同的指针之间施放

我目前正在开发一个项目,要求代码符合Misra 2012标准.在整个项目中,我们有许多必需的misra警告告诉我们,我们无法将指针转换为指向另一种类型的指针.事情就像void *memcpy(void *to, const void *from, size_t n)产生两个Misra必需的警告一样简单,因为需要分别将类型转换为void*和const void*.从void*转换为指向任何其他类型的指针也会发出Misra警告.

我的问题是Misra如何在没有任何警告被抛出的情况下期望malloc和其他所有工作?即使将void*缓冲区转换为uint8_t*缓冲区来逐字节解析abuffer并填充结构结构的所有元素也会引发大量警告?

而不是这些警告,它不仅可以显示使用注释或信息要求我们仔细检查包装,对齐和其他可能出错的地方吗?

c misra

4
推荐指数
2
解决办法
5038
查看次数

如何避免C++类模板中的无限递归

我有一个矩阵类,其大小由模板参数决定.

template <unsigned cRows, unsigned cCols>
class Matrix {
    ...
};
Run Code Online (Sandbox Code Playgroud)

我的程序使用几种大小的矩阵,通常是2x2,3x3和4x4.通过使用模板参数而不是运行时参数设置矩阵大小,编译器可以进行大量的内联和优化.

但是现在我需要一个成员函数来返回一个新的矩阵,该矩阵的行少一列,列少一列.

Matrix<cRows - 1, cCols - 1> Reduced(unsigned row, unsigned col) const { ... }
Run Code Online (Sandbox Code Playgroud)

这个想法是它将返回一个删除了指定行和列的矩阵.在实践中,这将仅使用具有至少三行和三列的矩阵来调用,在最小的位置返回2x2.

编译器没有看到下限,因此它会陷入无限递归,试图以不断减小的大小实例化模板.我尝试在函数本身中放入两条线索,这些较小的尺寸不会发生:

Matrix<cRows - 1, cCols - 1> Reduced(unsigned row, unsigned col) const {
    static_assert(cRows > 1 && cCols > 1);
    if (cRows <= 1 || cCols <= 1) throw std::domain_error();
    Matrix<cRows - 1, cCols - 1> r;
    // ... initialize r ...
    return r;
}
Run Code Online (Sandbox Code Playgroud)

对于编译器而言,static_assert或者if-statement似乎都不是一个足够强大的线索,即永远不会生成0x0矩阵.(具有讽刺意味的是,它确实抱怨if-statement具有恒定的编译时条件.) …

c++ recursion templates matrix

3
推荐指数
1
解决办法
1740
查看次数

为什么不在GotW 54中调整大小并清除作品?

参考HerbSutter的文章Gotw 54,他解释说

  1. 正确的"收缩适合"矢量或deque和

  2. 完全清除矢量或双端队列的正确方法

我们可以使用container.resize()container.clear()执行上述任务,还是我错过了什么?

c++ vector deque gotw

3
推荐指数
1
解决办法
247
查看次数

编写代码将给定数字转换为单词(例如1234作为输入应输出一千二百三十四)

编写C/C++/Java代码将给定的数字转换为单词.

例如: - 输入:1234

输出:一千二百三十四.

输入:10

输出:十

是否需要数字0到10的完整开关盒.

在每个数字名称之后添加"青少年"(例如:14:4"青少年".)从14到19.

而不是添加"ty"和20到99范围内的数字的数字名称.

等等.

我认为必须有一些更好的方法来解决这个问题.

C代码是首选.

c c++ logic data-structures

3
推荐指数
1
解决办法
10万
查看次数

如何在Windows中登录多个用户时获取活动用户?

假设有多个用户当前在Windows上登录.喂,user1登录,然后switch useruser2登录,(未做user1注销).假设有一个应用程序在用户登录时运行.有两个用户user1user2登录,user2作为活动用户,有两个应用程序.

我的问题是:应用程序如何知道其相应的用户是否处于活动状态?即,user2域中的应用程序确定其用户处于活动状态,而user1域中的应用程序确定其用户当前处于非活动状态.谢谢!

c++ windows

3
推荐指数
1
解决办法
6917
查看次数

警告C4146减去无符号类型的运算符

我从我想要使用的库中获取此代码.在编译时,我收到以下警告:

警告C4146:一元减号运算符应用于无符号类型,结果仍未签名

inline int lastbit (uint32_t v)
{
  int r;
  static const int MultiplyDeBruijnBitPosition[32] = 
    {
      0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8, 
      31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9
    };
  r = MultiplyDeBruijnBitPosition[((uint32_t)((v & -v) * 0x077CB531U)) >> 27];
  return r;
}
Run Code Online (Sandbox Code Playgroud)

如何通过尽可能少地更改库来修复它?

c++ unsigned compiler-errors

3
推荐指数
1
解决办法
2691
查看次数

查找没有数据结构的中位数

(我的代码是用Java编写的,但问题是不可知的;我只是在寻找算法的想法)

所以这就是问题所在:我创建了一个方法,只需找到数据集的中位数(以数组的形式给出).这是实施:

public static double getMedian(int[] numset) {
    ArrayList<Integer> anumset = new ArrayList<Integer>();
    for(int num : numset) {
        anumset.add(num);
    }
    anumset.sort(null);

    if(anumset.size() % 2 == 0) {
        return anumset.get(anumset.size() / 2);
    } else {
        return (anumset.get(anumset.size() / 2)
                   + anumset.get((anumset.size() / 2) + 1)) / 2;
    }
}
Run Code Online (Sandbox Code Playgroud)

我去学校的老师然后挑战我写一个方法再次找到中位数,但没有使用任何数据结构.这包括任何可以容纳多个值的东西,所以包括字符串,任何形式的数组等等.我花了很长时间试图想出一个想法,我很难过.有任何想法吗?

language-agnostic median

3
推荐指数
1
解决办法
188
查看次数