考虑以下关于积分pow的元函数(这只是一个例子):
class Meta
{
template<int N, typename T> static constexpr T ipow(T x)
{
return (N > 0) ? (x*ipow<N-1>(x))
: ((N < 0) ? (static_cast<T>(1)/ipow<N>(x))
: (1))
}
};
Run Code Online (Sandbox Code Playgroud)
如何为这样的函数写停止条件?
我想有一个方法来快速将详细信息转储到日志中.它会是这样的:
public static void log(String message, Class<?> sourceClass){
dump(formattedTime+sourceClass.getName()+"line"+lineNumberfromwhichthemessagecomes
(if several occurences are found, show all of them if there's no other way to
detectwhere has the method been called from).
}
Run Code Online (Sandbox Code Playgroud)
我已经知道了关于创建一个新的Exception对象并获取其堆栈跟踪的第一行的行号的技巧,但是通过使用它我必须添加行号作为参数,因为如果你在log方法中做了这个技巧,您将始终获得相同的行号(您进行操作的行之一).
有没有办法实现这一目标)?
在我写的一个方法中,我的代码怎么知道它当前在哪个方法?我需要这个,因为我想获取方法名称并解析它以获取它的一部分,例如"add_order",然后我可以使用第二部分"order"来处理.
我对C++元编程中的类型推导有一个小问题.有一定的功能做一些动作.
main.cpp中
template<typename T> void foo(T arg) {
// do some action on argument
std::cout << typeid(arg).name() << std::endl;
}
int main(int argc, char** argv) {
int array[100] = {0};
std::cout << typeid(array).name() << std::endl;
foo(array);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
A100_i
Pi
Run Code Online (Sandbox Code Playgroud)
为什么精氨酸在函数foo的()具有比另一种数据类型数组函数main()中?
我想做的事情如下:
custommacro x;
Run Code Online (Sandbox Code Playgroud)
这将扩展为:
declareSomething; int x; declareOtherthing;
Run Code Online (Sandbox Code Playgroud)
这甚至可能吗?
我已经把它欺骗了一次,operator=表现得像那样,但它不能用声明来完成.
用于Foo.a.b.c.d:
[:a,:b,:c,:d]?:d链中的最后一个方法调用?有没有办法获取实例方法并将其添加到类中(反之亦然)?
这是我的尝试,但它失败了因为Ruby不让我将实例方法绑定到类:
#!/usr/bin/env ruby
SOMETHING = :a
class SomeClass
def some_method(variable, value)
case SOMETHING
when :c
"output for case C"
when :a, :b
"output for A or B"
end
end
# here's my failed attampt to add some_method to SomeClass:
self.instance_method(:some_method).bind(self)
end
# it works as an instance method
bash = SomeClass.new
puts bash.some_method("EDITOR","vim")
# but not as a class method... yet
puts SomeClass.some_method("EDITOR","vim")
Run Code Online (Sandbox Code Playgroud)
错误是"bind参数必须是SomeClass的实例".换句话说,我不能调用bind(self)因为self 是类而不是类的实例.
我这里缺乏Python元编程知识.假设我有以下内容:
class OwnCompanyManager(models.Manager):
"""Only companies of this user"""
def get_queryset(self, user):
if user.is_superuser:
return super(OwnCompanyManager, self).get_queryset()
return super(OwnCompanyManager, self).get_queryset().filter(
companyuser__user=user)
class OwnPublisherManager(models.Manager):
"""Only publishers of this user's company"""
def get_queryset(self, user):
if user.is_superuser:
return super(OwnPublisherManager, self).get_queryset()
return super(OwnPublisherManager, self).get_queryset().filter(
company__companyuser__user=user)
class Company(models.Model):
name = models.CharField(max_length=45)
objects = models.Manager()
own = OwnCompanyManager()
class Publisher(models.Model):
company = models.ForeignKey(Company)
allow_latest_dev = models.BooleanField(default=False)
domains_blocked = models.BooleanField(default=False)
objects = models.Manager()
own = OwnPublisherManager()
Run Code Online (Sandbox Code Playgroud)
我还有很多.我不喜欢复制粘贴样板Own(Publisher|Company|Etcetra)Manager).正如您所见,唯一的变化是在过滤器中.
我怎样才能提取Own(InsertModelNameHere)Manager和使用它Company,Publisher和其他车型?我想在管理器定义中指定过滤器kwargs.
调频:
function [] = f(the_only_argument)
% Do awesome things here
end
Run Code Online (Sandbox Code Playgroud)
GM:
function [value] = g(the_only_argument)
% Do awesome things here
value = awesome_value;
end
Run Code Online (Sandbox Code Playgroud)
是否有某种ReturnsNothing,这样:
assert(ReturnsNothing(@f) & ~ReturnsNothing(@g))
Run Code Online (Sandbox Code Playgroud)
PS我希望能够调用arrayfun(@f, [1,1,1]),目前返回错误:
??? Error using ==> f
Too many output arguments.
Run Code Online (Sandbox Code Playgroud) 我希望能够做到这样的事情:
template <typename template_type>
class awesome_class{
public:
void some_function(void){
// if (template_type == type_a)
cout << "I am of type_a and doing type_a specific methods";
// endif
cout << "I am not of type_a and doing my normal methods";
}
}
Run Code Online (Sandbox Code Playgroud)
我基本上想扩展一个模板化类,如果它是一个包含特定成员变量的类型,那么运行一些由于成员变量而可能的优化代码,但是如果它不属于那个类型那么只需忽略该部分代码
这在C++中是否可行?或者我是否完全错了?
编辑:我专门的功能基本上要求我这样做几乎班上的每一个功能.那时,我不妨再做一个专门针对有关类型的课程.再次,谢谢你,学到了一些新的和有价值的东西,可能会在其他情况下派上用场!
c++ templates metaprogramming template-meta-programming c++11
metaprogramming ×10
c++ ×4
ruby ×3
c++11 ×2
templates ×2
django ×1
java ×1
line-numbers ×1
logging ×1
macros ×1
matlab ×1
meta ×1
python ×1
reflection ×1