我正在尝试在(非成员)函数上使用部分模板特化,而我正在绊倒语法.我已经在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) 新手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) 在源代码中,我看到min和max未定义.可能是什么原因?
// remove stupid MSVC min/max macro definitions
#ifdef WIN32
#undef min
#undef max
#endif
Run Code Online (Sandbox Code Playgroud) 我目前正在开发一个项目,要求代码符合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并填充结构结构的所有元素也会引发大量警告?
而不是这些警告,它不仅可以显示使用注释或信息要求我们仔细检查包装,对齐和其他可能出错的地方吗?
我有一个矩阵类,其大小由模板参数决定.
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具有恒定的编译时条件.) …
参考HerbSutter的文章Gotw 54,他解释说
正确的"收缩适合"矢量或deque和
完全清除矢量或双端队列的正确方法
我们可以使用
container.resize()和container.clear()执行上述任务,还是我错过了什么?
编写C/C++/Java代码将给定的数字转换为单词.
例如: - 输入:1234
输出:一千二百三十四.
输入:10
输出:十
是否需要数字0到10的完整开关盒.
在每个数字名称之后添加"青少年"(例如:14:4"青少年".)从14到19.
而不是添加"ty"和20到99范围内的数字的数字名称.
等等.
我认为必须有一些更好的方法来解决这个问题.
C代码是首选.
假设有多个用户当前在Windows上登录.喂,user1登录,然后switch user和user2登录,(未做user1注销).假设有一个应用程序在用户登录时运行.有两个用户user1并user2登录,user2作为活动用户,有两个应用程序.
我的问题是:应用程序如何知道其相应的用户是否处于活动状态?即,user2域中的应用程序确定其用户处于活动状态,而user1域中的应用程序确定其用户当前处于非活动状态.谢谢!
我从我想要使用的库中获取此代码.在编译时,我收到以下警告:
警告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)
如何通过尽可能少地更改库来修复它?
(我的代码是用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)
我去学校的老师然后挑战我写一个方法再次找到中位数,但没有使用任何数据结构.这包括任何可以容纳多个值的东西,所以包括字符串,任何形式的数组等等.我花了很长时间试图想出一个想法,我很难过.有任何想法吗?